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

javascript-我如何获取此Firebase数据以在循环外使用?

(javascript - How do i get this firebase data to use it outside the loop?)

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

我有这个脚本,它从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倍子代数

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

如果我正确理解你的问题,由于异步push()方法返回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);
            
        });
    }