Как мне получить эти данные firebase, чтобы использовать их вне цикла?

#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, но это ответ, большое вам спасибо! 🙂