Javascript Firebase:等待异步并推送到阵列
我希望获得指定的所有数据,并将其推送到数组,但此函数在进程完成之前返回回调 函数getRadiusPartner(){ getAllPartner() .then(功能(捕捉){ var位置=[]; snap.forEach(函数(用户){ coordsRef.child(user).once(“值”,函数(快照){ location.push(snapshot.val()); }) }) 返回承诺。全部(位置) }); }Javascript Firebase:等待异步并推送到阵列,javascript,node.js,firebase,firebase-realtime-database,Javascript,Node.js,Firebase,Firebase Realtime Database,我希望获得指定的所有数据,并将其推送到数组,但此函数在进程完成之前返回回调 函数getRadiusPartner(){ getAllPartner() .then(功能(捕捉){ var位置=[]; snap.forEach(函数(用户){ coordsRef.child(user).once(“值”,函数(快照){ location.push(snapshot.val()); }) }) 返回承诺。全部(位置) }); } 如果要等待承诺,通常不能使用.forEach()。 Javascr
如果要等待承诺,通常不能使用.forEach()。 Javascript和承诺不能以那种方式知道何时完成forEach 现在您有几个选择:
function getRadiusPartner(){
getAllPartner()
.then(function (snap){
var location = [];
snap.forEach(function(user){
coordsRef.child(user).once("value", function(snapshot){
location.push(snapshot.val());
})
})
setTimeout(function(){return Promise.all(location)},1500);
});
}
findItem = function (id) {
var defer = $q.defer();
snap.forEach(items, function (item) {
if (item.id === id) {
defer.resolve(item);
}
});
return defer.promise;
};
谢谢你。。如果我想使用第一个选项,那么如果数据超过1500,怎么样?好吧,第一个选项是手动方法,不是最有效的,但它是最容易实现的。forEach循环非常快。如果出于某种原因,比如说上网速度慢,或者是从网上撤下来,或者诸如此类的原因,你可以把时间延长一点,以防万一