如何在firebase嵌套forEach中获得回调

时间:2017-01-13 12:50:45

标签: jquery asynchronous firebase firebase-realtime-database

在回调中获取空值 即使我在控制台\${(\w+)->(\w+\(\))} 中获得了价值。

但我希望console.log(list)完成所有finallist操作,并且所有forEach推送到csnap.key

list

2 个答案:

答案 0 :(得分:1)

访问Firebase数据库(以及几乎所有现代Web /云API)时,对后端的调用是异步发生的。在加载数据时,main方法中的代码将继续,而不是等待加载数据。然后,当加载数据时,将调用您的回调函数。

解决这个问题的最简单方法是重新解决问题。而不是思考"首先获取数据,然后打印数据",将其视为"开始加载数据,然后当数据可用时,打印它"。在代码中,这转换为移动逻辑以将数据打印到回调:

mkeys.forEach(function (key) {
    var msgstref = firebase.database().ref("Msgtemplate/" + key + '/Actionusers');
    msgstref.orderByChild('status').equalTo(true).limitToFirst(2).once('value').then(function (snap) {
        snap.forEach(function (csnap) {
            list.push(csnap.key);
        })
        console.log(list);
    })
})

当然,此代码中的console.log也可能是其他任何内容。

此问题已经涉及很多,包括Firebase和一般的Web编程。我建议您研究其中一些问题并回答,以掌握异步Web API的概念:

正如我所说......这是一个常见的问题。 : - )

答案 1 :(得分:0)

更改列表FROM var list = [];                  要列出:FirebaseListObservable;

然后在调用方法中订阅返回此列表的函数,以便即使在UI中元素也会相应地更新。