我想顺序执行一些基于数组的异步函数。
我以为这样就行了:
var Promise = require("bluebird");
Promise.cast([1,2,3]).reduce(function(_,i){
console.log("Launching " + i);
return Promise.delay(Math.floor(Math.random()*1000)).then(function(){
console.log("Executing " + i);
});
},0);但我得到
Launching 1
Launching 2
Launching 3
Executing 2
Executing 1
Executing 3而不是期望的结果
Launching 1
Executing 1
Launching 2
Executing 2
Launching 3
Executing 3我如何确保在这里完全连续执行?
请注意,我知道如何在没有承诺的情况下做到这一点,我只对完整的承诺解决方案感兴趣。
发布于 2014-03-04 15:19:46
你用的是蓝鸟的旧版本。.reduce的行为在v1中被更改为这样工作:
与
.map和.filter一样,.reduce现在允许从迭代函数中返回承诺和支持。
( 来自变革者g )
请更新到最新版本。这将导致代码正确运行。
https://stackoverflow.com/questions/22175723
复制相似问题