有没有办法同时使用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
。
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
。