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

Is there a way to use Bluebird's Promise.each concurrently?

Bluebird 有一个很好的函数,叫做 Promise.map,可以让你传入一个额外的参数来表示并发操作的数量。

例如

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

但是,Promise.map 将在内存中为所有 arrayOfThings 保留一个包含 database.set newThing returns 的数组。我宁愿不将所有这些都存储在内存中,因为它会使我的服务器陷入困境。最佳情况下,我想用 Promise.each 替换 Promise.map ,这样它就不会将返回值存储在内存中。不幸的是,这太慢了,因为 Promise.each 不是并发的。

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

首先,目前Promise.each实际上并没有分配数组。对此有一个悬而未决的问题——我被指派了,我想道歉——我不在开发箱前,而且一直在国外。我会尽快解决这个问题。

其次 - 没有。目前没有这样的功能。 Promise.each 是为了精确 运行 顺序创建的。拉取请求 可能 会被接受,并且在 PromiseArray 之上实施应该不会太难。我们只是之前没有真正看到用例。

同时您可以使用 Promise.map