我正在尝试使用 for 循环顺序调用一系列承诺,但我无法以正确的顺序工作。从理论上讲,控制台应该记录第一个块,但它会记录第二个块(这意味着所有的 Promise 都被同时调用,而第二个 Promise 只在第一个之后被调用)。
我认为这可能与此链接相似,但我认为我是在声明函数而不是在 then 声明中调用它? 如何在 Javascript 中使用 Q 顺序运行 Promise?
预期输出:
starting: 3
ending: 3
starting: 2
ending: 2
starting: 1
ending: 1
实际输出:
starting: 3
starting: 2
starting: 1
ending: 1
ending: 2
ending: 3
var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope, $q, $timeout) {
var temp = $q.when({});
var arr = [3, 2, 1];
arr.forEach(function(element) {
temp = temp.then(delay(element));
})
function delay(timing) {
var deferred = $q.defer();
console.log('starting: ' + timing)
$timeout(function() {
console.log('ending: ' + timing);
deferred.resolve(timing);
}, timing * 1000);
return deferred.promise;
}
});