使用承诺顺序执行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。

( 来自更新日志 )

请更新到最新版本。 这将导致代码正常运行。