【发布时间】:2017-01-13 12:50:45
【问题描述】:
在回调中获取空值..
即使我在控制台console.log(list) 中获得价值。
但我希望 finallist 之后所有 forEach 操作完成并且所有 csnap.key 推送到 list
var list = [];
var mkeys = ['-Ka2D86jpdjKpTf2-Nmf', '-KaCPtlIoPX34ltMPqs3'];
function Getumanes(msgkeys,callback) {
msgkeys.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);
})
})
callback(list)
}
Getumanes(mkeys, function (finallist) {
console.log("finallist: " + finallist);
});
【问题讨论】:
-
Firebase 倾向于异步收集数据,因此您可能会在列表填充之前将其发送到控制台。您需要等到异步回调完成后才能使用
list。 -
Thanx @Alex,你能详细说明我怎样才能做到这一点吗?通过一段代码
-
基本上这个值是在回调内部计算出来的,回调在console.log(list)之后执行,这意味着list为空。如果您在回调中使用 console.log,您将看到数据。这就是异步请求的工作方式。它们被调用,其余代码运行,当请求完成时,回调运行。
标签: jquery asynchronous firebase firebase-realtime-database