如何使用bluebirdjs顺序链接承诺?

red*_*off 8 javascript chaining promise chain bluebird

Promise.all()不保证承诺将按顺序解决.如何才能做到这一点?

Ben*_*aum 8

由于您使用的是Bluebird JS,因此实际上可以通过简单的方式完成.

在2.0版本中,Bluebird引入了Promise.each执行此操作的方法,因为循环a非常简单,但由于它很常见并且一次又一次地请求,最终它被添加为自己的方法.

function foo(item, ms){ // note bluebird has a delay method
    return Promise.delay(ms, item).then(console.log.bind(console))
}

var items = ['one', 'two', 'three'];

Promise.each(items, function(item, i){
    return foo(item, (items.length - i) * 1000)
});
Run Code Online (Sandbox Code Playgroud)

这产生与其他答案相同的结果,只有较少的代码行,并且它还允许Bluebird在迭代上执行优化.