承诺链不使用 Q 承诺库按顺序执行
Promise chains are not executed sequentially using Q promise library
我正在代码中执行多个批处理异步操作。尽管批处理中的操作应异步执行,但批处理应一个接一个地同步执行。
这是我创建的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 个批量承诺操作。这意味着此示例的输出如下所示:
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()
但它在第一次链后停止执行。我错过了一些明显的东西吗?
感谢您的任何建议。
干杯
我错过了一些明显的东西吗?
是的。为了让then
用另一个承诺来解决承诺,你必须将另一个承诺归还给它。你的函数只是启动另一个asyncChain
,但从回调返回undefined
,这会立即解决承诺。
asyncChain(10, 'FIRST CHAIN').then(function () {
return asyncChain(10, 'SECOND CHAIN');
}).then(function(){
return asyncChain(10, 'THIRD CHAIN');
});
相关文章:
- Q 承诺链接以正确的顺序做事
- 控制承诺执行顺序
- 不要在顺序链式承诺中包含 q 承诺结果
- AngularJS中承诺的顺序和时间
- 如何将嵌套承诺与Q连锁?我可以'Don’我不能让它们按正确的顺序运行
- 如何按顺序执行承诺数组
- 使用动态构建的 jQuery 承诺链按顺序激活特定元素
- 承诺回调的触发顺序是什么
- nodeJS中的承诺/承诺中的回调/执行顺序是不对的
- 从数组中按顺序执行一堆 WinJS 承诺
- 从顺序 jQuery ajax 调用返回承诺
- Angular JS:按顺序处理承诺(无链接)
- 承诺链不使用 Q 承诺库按顺序执行
- 如何使用承诺实现顺序异步计算
- AngularJS$q承诺成功的回调以错误的顺序执行
- Javascript承诺以相反的顺序加载
- 承诺的解决顺序是否与Promise.sexel中提到的顺序相同
- 链接HTTP帖子承诺角度不按顺序
- 我如何存储for循环的计数,承诺以任意顺序返回
- 我如何使用bluebirdjs顺序链承诺