I want to sequentially execute some asynchronous functions based on an array.
I thought this would do it :
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);
but I get
Launching 1
Launching 2
Launching 3
Executing 2
Executing 1
Executing 3
instead of the desired result which would be
Launching 1
Executing 1
Launching 2
Executing 2
Launching 3
Executing 3
How can I ensure wholly sequential execution here ?
Note that I know how to do that without promises, I'm only interested in full promises solutions.
You are using an old version of Bluebird. The behavior of .reduce
was changed in v1
to work this way:
Like
.map
and.filter
,.reduce
now allows returning promises and thenables from the iteration function.
Please update to the most recent version. This will cause the code to run correctly.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.