让我们以此为例:
这是一个有效的代码,但由于数组可以是'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吗?
答案 0 :(得分:6)
创建一个处理迭代的函数:
function go (urls) {
if (urls[0]) {
require(urls[0]).then(function () {
go(urls.slice(1));
});
}
}
go(urls);
答案 1 :(得分:2)
以下是一篇优秀的博文: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();
});