[英]How can I make a waterfall Q promises?
我們以此為例:
這是一個工作代碼,但由於數組可以是'1到n',這顯然不是我想要的。 我需要3個需求作為瀑布,而不是並行。 在最后的承諾中,我需要解決最終的承諾,即var deferred。
require(urls[0]).then(function () {
require(urls[1]).then(function () {
require(urls[2]).then(function () {
deferred.resolve();
});
});
})
這種方法不起作用,因為這將並行執行所有$ http調用。
var promises = [];
angular.forEach(urls, function (value) {
promises.push(require(value));
});
$q.all(promises).then(function () {
deferred.resolve();
});
是否有一個很好的方法來執行for / cycle?
創建一個函數來處理迭代:
function go (urls) {
if (urls[0]) {
require(urls[0]).then(function () {
go(urls.slice(1));
});
}
}
go(urls);
這是一篇很棒的博文: http : //www.codeducky.org/q-serial/
我將只分享相關的部分。
首先我們定義這個輔助方法:
function serial(tasks) {
var prevPromise;
angular.forEach(tasks, function (task) {
//First task
if (!prevPromise) {
prevPromise = task();
} else {
prevPromise = prevPromise.then(task);
}
});
return prevPromise;
}
然后我們使用它。
serial([
function() { return require(urls[0]) },
function() { return require(urls[1]) },
function() { return require(urls[2]) }
]).then(function () {
deferred.resolve();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.