2
我在管理多個承諾的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,但然後我得到控制檯錯誤「undefined不是一個函數」在最初調用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
嘿感謝您的答覆。我仍然收到錯誤,但我猜它與getLatest()有關。我已refreshofed()設置爲您的答案。我收到錯誤「無法讀取未定義的屬性'searchterm'」。我將使用getLatest()代碼 – DaveS 2014-10-18 23:29:25
更新問題得到它的工作。謝謝! – DaveS 2014-10-18 23:44:58