Warm tip: This article is reproduced from serverfault.com, please click

How do i get this firebase data to use it outside the loop?

发布于 2020-11-28 00:19:58

I have this script that runs through all the child items in my realtime database from 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
                        });
                    }
            });
        }
    }

but how do i get const data = childSnapshot.val() outside the foreach loop so i can use it here:

if(lid == data.Lidnummer) {
  console.log('err')
} else {
    gebruikersref.push({
      Voornaam: voornaam,
      Achternaam: achternaam,
      Email: email,
      Lidnummer: lid
    });
}

Otherwise the else method runs x times the number of children and will push my data (that only may be pushed once) x times the children

Questioner
user10004588
Viewed
0
Renaud Tarnec 2020-11-28 21:28:23

If I correctly understand your question, since the asynchronous push() method returns a ThenableReference, you can use Promise.all() as follows:

    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);
            
        });
    }