【问题标题】:Is there a way to use Bluebird's Promise.each concurrently?有没有办法同时使用 Bluebird 的 Promise.each?
【发布时间】:2017-03-17 10:14:06
【问题描述】:

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

例如

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

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

有什么办法可以改变我的代码让它像那样工作吗?

【问题讨论】:

    标签: concurrency promise bluebird


    【解决方案1】:

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

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

    同时你可以使用Promise.map

    【讨论】:

      猜你喜欢
      • 2017-05-27
      • 2017-08-11
      • 1970-01-01
      • 2016-08-17
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多