有一个异步任务,资源存在一数组里,需要按顺序完成
一开始以为用Promise.map(),发现还是并发的。
还有一个方法是用递归,但不清楚bluebird里是否有现成的接口呢?
一开始以为用Promise.map(),发现还是并发的。
还有一个方法是用递归,但不清楚bluebird里是否有现成的接口呢?
|
1
https://github.com/petkaantonov/bluebird/blob/master/API.md#reducefunction-reducer--dynamic-initialvalue---promise
这个应该是 ok 的。你只要在 reduce里面关注自身的数据,不去拿结果就好了。 |
|
2
|
|
iwegeSep 26, 2014
3
@ryanking8215
也没必要递归,其实有简单的方法: var promise = Promise.resolve(); array.forEach(function(){ promise = promise.then(async_task); }); promise.then(function(){/*done*/}); |
|
4
@iwege
没明白,array.forEach()没办法保证一个promise被settle后再处理下一个;只能保证async_task是按顺序起的,这个和Promise.map()作用是一样的。 |
|
5
@iwege 我看错了,确实可以的,谢谢!
|