【发布时间】:2013-09-26 20:28:33
【问题描述】:
我正在我的代码中执行多个批处理异步操作。虽然批处理中的操作应该异步执行,但批处理应该一个接一个地同步执行。
这是我创建的jsfiddle。查看控制台,因为所有输出都在那里。为了方便起见,这里是代码:
asyncChain(10, 'FIRST CHAIN')
.then(function () {
asyncChain(10, 'SECOND CHAIN');
})
.then(function(){
asyncChain(10, 'THIRD CHAIN');
});
function asyncChain(n, msg) {
var promiseChain = Q.fcall(function () {
10;
});
console.log('starting:' + msg);
for (var i = 0; i < n; i++) {
promiseChain = promiseChain.then(asyncOperation(i, msg));
}
console.log('returning' + msg);
return promiseChain;
}
function asyncOperation(i, msg) {
var d = Q.defer();
setTimeout(function () {
console.log('resolving for #' + i + msg);
d.resolve(i);
}, 300 + Math.random()*1000);
return d.promise;
}
基本上这些是我希望一个接一个完成的 3 个批处理的 promise 操作。这意味着此示例的输出将是这样的:
starting FIRST CHAIN
returning FIRST CHAIN
resolving 1..10 FIRST CHAIN
starting SECOND CHAIN
returning SECOND CHAIN
resolving 1..10 SECOND CHAIN
and so on
我尝试使用all() 方法而不是then(),但它在第一个链后停止执行。我错过了一些明显的东西吗?
感谢您的建议。
干杯
【问题讨论】:
-
在批次中,“异步”仍然是指“顺序”,而不是“并行”?
-
我指的是后者。
标签: javascript promise deferred q