Promise(bluebird)数组的处理

2014-09-25 15:33:36 +08:00
 ryanking8215
有一个异步任务,资源存在一数组里,需要按顺序完成
一开始以为用Promise.map(),发现还是并发的。

还有一个方法是用递归,但不清楚bluebird里是否有现成的接口呢?
4412 次点击
所在节点    Node.js
6 条回复
iwege
2014-09-26 08:42:25 +08:00
https://github.com/petkaantonov/bluebird/blob/master/API.md#reducefunction-reducer--dynamic-initialvalue---promise

这个应该是 ok 的。你只要在 reduce里面关注自身的数据,不去拿结果就好了。
ryanking8215
2014-09-26 09:28:44 +08:00
Promise.reduce是可以的,没仔细看文档
目前我是用递归的
https://gist.github.com/ryanking8215/e0278be41de8da06a114
iwege
2014-09-26 12:41:15 +08:00
@ryanking8215
也没必要递归,其实有简单的方法:

var promise = Promise.resolve();
array.forEach(function(){
promise = promise.then(async_task);
});

promise.then(function(){/*done*/});
ryanking8215
2014-09-26 13:10:18 +08:00
@iwege
没明白,array.forEach()没办法保证一个promise被settle后再处理下一个;只能保证async_task是按顺序起的,这个和Promise.map()作用是一样的。
ryanking8215
2014-09-26 13:24:55 +08:00
@iwege 我看错了,确实可以的,谢谢!
andyhu
2014-10-22 13:30:45 +08:00
怎么感觉用起来比async复杂好多,我在用了一段bluebird以后还是回async阵营了,立刻觉得生活还是很美好的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/135645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX