我在管理具有多个 Promise 的 for 循环时遇到一些麻烦。我读过应该使用 $q.all,但到目前为止我还没有取得任何成功。我需要这个函数来确保 for 循环内的所有异步调用都已发生。
refreshFeed: function(){
var defer = $q.defer();
var promises = []; // array of promises
for (var x = 0; x < userdata.length; x++){
this.getLatest(x).then(function(){
promises.push(x);
});
}
console.log(userdata); // this is updated successfully by getLatest(x)
$q.all(promises).then(function(){
defer.resolve();
})
return defer;
}
它成功打印了console.log,但随后我在最初调用refreshFeed()的行处收到控制台错误“未定义不是函数”。
如有任何帮助,我们将不胜感激。谢谢!
编辑:
getLatest: function(x){
var deferred = $q.defer();
var promise = twitterService.getLatestTweets(userdata[x].searchterm, userdata[x].sources).then(function(data) {
userdata[x].tweets = data;
console.log(userdata[x].tweets);
deferred.resolve();
});
return deferred.promise;
}
更新:我使用了 PSL 的答案并尝试了 getLatest,终于让它工作了。我只需要将 userdata[x] 替换为函数参数。谢谢@PSL
最佳答案
您需要传递一系列 promise ,即使您使用延迟模式,您也无法解决任何问题。假设 getLatest
返回一个您可以执行的 promise :-
refreshFeed: function(){
return $q.all(userdata.map(this.getLatest));
}
<强> Array.map
关于angularjs - For 循环和 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445449/