#javascript #firebase #vue.js #firebase-realtime-database #nuxt.js
# #javascript #firebase #vue.js #firebase-realtime-database #nuxt.js
Вопрос:
У меня есть этот скрипт, который просматривает все дочерние элементы в моей базе данных реального времени из firebase:
methods: {
submit: function() {
const gebruikersref = firebase.database().ref('Gebruikers/')
var self = this
gebruikersref.once('value', function(snapshot) {
const lid = self.lidnummer;
const voornaam = self.voornaam;
const achternaam = self.achternaam;
const email = self.email;
snapshot.forEach(function(childSnapshot) {
const data = childSnapshot.val()
});
if(lid == data.Lidnummer) {
console.log('err')
} else {
gebruikersref.push({
Voornaam: voornaam,
Achternaam: achternaam,
Email: email,
Lidnummer: lid
});
}
});
}
}
но как мне выйти const data = childSnapshot.val()
за пределы цикла foreach, чтобы я мог использовать его здесь:
if(lid == data.Lidnummer) {
console.log('err')
} else {
gebruikersref.push({
Voornaam: voornaam,
Achternaam: achternaam,
Email: email,
Lidnummer: lid
});
}
В противном случае метод else запускает в x раз больше дочерних элементов и отправит мои данные (которые могут быть отправлены только один раз) в x раз больше дочерних элементов
Комментарии:
1. Объявите его в более высокой области видимости, что видно по коду, который должен его использовать?
2. Да, я знаю это, чтобы это было видно, но как мне объявить это в более высокой области из более низкой области?
Ответ №1:
Если я правильно понимаю ваш вопрос, поскольку асинхронный push()
метод возвращает a ThenableReference
, вы можете использовать Promise.all()
следующее:
submit: function() {
const gebruikersref = firebase.database().ref('Gebruikers/')
var self = this
gebruikersref.once('value', function(snapshot) {
const lid = self.lidnummer;
const voornaam = self.voornaam;
const achternaam = self.achternaam;
const email = self.email;
const promises = [];
snapshot.forEach(function(childSnapshot) {
const data = childSnapshot.val()
if (lid == data.Lidnummer) {
console.log('err')
} else {
promises.push(gebruikersref.push({
Voornaam: voornaam,
Achternaam: achternaam,
Email: email,
Lidnummer: lid
})
);
}
});
Promise.all(promises);
});
}
Комментарии:
1. Извините за поздний ответ @Renaud Tarnec, но это ответ, большое вам спасибо! 🙂