在回调中获取空值
即使我在控制台\${(\w+)->(\w+\(\))}
中获得了价值。
但我希望console.log(list)
完成所有finallist
操作,并且所有forEach
推送到csnap.key
list
答案 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中元素也会相应地更新。