【问题标题】:How do i get this firebase data to use it outside the loop?我如何让这个 firebase 数据在循环外使用它?
【发布时间】:2021-03-10 16:52:53
【问题描述】:

我有这个脚本可以从 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
                        });
                    }
            });
        }
    }

但是我如何在 foreach 循环之外获得 const data = childSnapshot.val() 以便我可以在这里使用它:

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

否则 else 方法会运行 x 次子节点的数量,并将推送我的数据(只能推送一次)x 次子节点

【问题讨论】:

  • 在更高的范围内声明,能被需要使用的代码看到吗?
  • 是的,我知道这样可以看到它,但是我如何从较低的范围在较高的范围内声明它?

标签: javascript firebase vue.js firebase-realtime-database nuxt.js


【解决方案1】:

如果我正确理解您的问题,由于异步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);
            
        });
    }

【讨论】:

  • 很抱歉@Renaud Tarnec 回复晚了,但这是答案,非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2011-06-10
  • 2012-04-06
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多