Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用承诺顺序执行函数_Javascript_Node.js_Promise_Bluebird - Fatal编程技术网

Javascript 使用承诺顺序执行函数

Javascript 使用承诺顺序执行函数,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我想基于数组顺序执行一些异步函数 我以为这样就行了: 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 "

我想基于数组顺序执行一些异步函数

我以为这样就行了:

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
我如何确保在这里完全按顺序执行


请注意,我知道如何在没有承诺的情况下做到这一点,我只对完全承诺的解决方案感兴趣。

您使用的是旧版本的Bluebird。
.reduce
的行为在
v1
中更改为以下方式:

.map
.filter
.reduce
现在允许从迭代函数返回承诺和表

()


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

是的,将Bluebird升级到1.0.8解决了问题。如果有人正在阅读此文件,并且“卡在”Bluebird的
版本上,无法更新-请告诉我,我将添加
答案-否则,我不希望有更多人升级到现代Bluebird。