[英]$q.all - resolving too early?
我有一個函數,可以進行一些服務器調用:
function doCalls(options) {
var deferred = $q.defer;
myService.doCallOne(options).then(function(response){
myService.doCallTwo().then(function() {
deferred.resolve();
});
});
return deferred.promise;
}
我有一系列不同的選項,我想創建一個promises數組傳遞給$q.all
,所以我這樣做:
var promiseArray = [];
_.each(optionArray, function(options) {
promiseArray.push(doCalls(options));
});
然后我試着等他們來解決:
$q.all(promiseArray).then(function() {
doNextPart();
});
問題是, doNextPart()
似乎在我的任何承諾解決之前被調用。 我在做什么明顯錯了嗎?
你忘了調用 $q.defer
,所以它實際上並沒有創建一個延遲。 你的doCalls
函數調用返回undefined
,你的deferred.resolve()
調用拋出異常(被promises吞噬), $q.all
立即用undefined
s數組實現。
您可以將代碼更改為
var deferred = $q.defer();
// ^^
但實際上你應該避免延遲反模式 ! 只是用
function doCalls(options) {
return myService.doCallOne(options).then(function(response){
return myService.doCallTwo();
}).then(function(secondResponse) {
return undefined; // you might want to omit this
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.