[英]loop of promises after a single promise
我只需要寫一個promise,然后在這個promise的結果下,創建一個電影數組,就必須在該數組中循環,並對每個元素進行一個遠程調用(也帶有promise)以裝飾其他數據。 我這樣嘗試:
var deferred = $q.defer();
var promises = [];
angular.forEach(tree, function(node) {
promises.push(
APICall.GetMovieList(node).then(function(success){
var contents = {};
//simple data manipulation
return contents;
})
.then(function(contents){ /////////////////////// concatenation part that won't work
angular.forEach(contents, function(content) {
APICall.GetMovieDetails(content.ID).then(function(success){
content.metadata = success.metadata;
});
});
return contents;
})
);
});
$q.all(promises).then(ResolveFunction);
return deferred.promise;
出於可讀性考慮,我刪除了ResolveFunction,它僅管理promise數組並執行$ q.resolve(results)。 問題是,如果沒有串聯,它就像一個超級按鈕一樣工作,但是有了必要的串聯,它只會返回與以前相同的結果,由於異步調用將在之后調用,因此它的行為是這樣的……這是個好主意嗎?創建另一個deferred並在串聯部分中嵌套$ q.all並返回$ q.all解決的數組承諾? 非常感謝
您無需創建第二個deferred
(根本不需要deferred
)。
只需執行以下操作:
var promises = [];
angular.forEach(tree, function(node) {
promises.push(
APICall.GetMovieList(node).then(function(success){
var contents = {};
//simple data manipulation
return contents;
})
.then(function(contents){
var contentPromises = [];
angular.forEach(contents, function(content) {
contentPromises.push(
APICall.GetMovieDetails(content.ID).then(function(success){
content.metadata = success.metadata;
})
);
});
return $q.all(contentPromises).then(function() {
return contents;
});
})
);
});
return $q.all(promises).then(function(nodes) {
return nodes;
});
這里是一個工作的jsfiddle,演示用嘲笑APICall
-Factory。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.