使用承诺顺序执行function
我想依次执行一些基于数组的asynchronous函数。
我以为这会做到这一点:
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
我怎样才能确保在这里完全顺序执行?
请注意,我知道如何做到这一点,没有承诺,我只对完全承诺的解决scheme感兴趣。
你正在使用老版本的蓝鸟。 .reduce
的行为在v1
被改变了,以这种方式工作:
像
.map
和.filter
一样,.filter
现在允许从迭代函数返回promise和thenables。
( 来自更新日志 )
请更新到最新版本。 这将导致代码正常运行。