有没有办法同时使用Bluebird的Promise.each?

时间:2016-11-03 17:46:15

标签: concurrency promise bluebird

Bluebird有一个很好的函数叫Promise.map,它允许你为并发操作量传递一个额外的参数。

e.g。

yield Promise.map arrayOfThings, coroutine (thing) ->
  newThing = yield thing.operate()
  database.set newThing
, concurrency: 500

但是,Promise.map将为所有database.set newThing保留内存中任何arrayOfThings返回的数组。我宁愿不将所有内容存储在内存中,因为它会使我的服务器陷入困境。最理想的情况是,我想将Promise.map替换为Promise.each,因此它不会将返回的值存储在内存中。不幸的是,这是超级慢,因为Promise.each不是并发的。

我有什么方法可以改变我的代码以使其像那样工作吗?

1 个答案:

答案 0 :(得分:3)

首先,Promise.each实际上并没有分配数组。这是一个悬而未决的问题 - 我被分配了,我想道歉 - 我不是在开发盒子前面并且已经出国了。我会尽快解决这个问题。

其次 - 没有。目前没有这样的功能。创建Promise.each是为了按顺序精确地运行事物。拉取请求可能受理,并且在PromiseArray之上实现起来应该不会太难。我们之前没有真正看过用例。

同时您可以使用Promise.map