我想获取指定的所有数据,并推送到数组,但此函数在进程完成之前返回回调。
function getRadiusPartner(){
getAllPartner()
.then(function (snap){
var location = [];
snap.forEach(function(user){
coordsRef.child(user).once("value", function(snapshot){
location.push(snapshot.val());
})
})
return Promise.all(location)
});
}
答案 0 :(得分:0)
通常,如果您想等待承诺,则不能使用.forEach()。 Javascript和承诺不会以知道何时完成forEach的方式工作。
现在你有几个选择:
你可以有一个简单的setTimeout函数,等待一秒钟或一点点,然后履行承诺。
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);
});
}
如果你有一个数组,你可以有一个if语句来检查循环是否在Array.length - 1然后解析promise
如果您知道自己在找什么,可以在foreach循环中找到该项后返回
findItem = function (id) {
var defer = $q.defer();
snap.forEach(items, function (item) {
if (item.id === id) {
defer.resolve(item);
}
});
return defer.promise;
};