【发布时间】:2013-12-31 00:48:30
【问题描述】:
如何编写限制 Q Promise 并发的方法?
例如,我有一个方法spawnProcess。它返回一个 Q 承诺。
我希望一次生成的进程不超过 5 个,但对调用代码透明。
我需要实现的是一个带有签名的函数
function limitConcurrency(promiseFactory, limit)
我可以这样称呼
spawnProcess = limitConcurrency(spawnProcess, 5);
// use spawnProcess as usual
我已经开始研究我的版本,但我想知道是否有人有我可以检查的简洁实现。
【问题讨论】:
-
您是为浏览器编写代码,还是为 Node 编写代码?如果是前者,就没有并发……
-
@Matt:我正在为节点写作。我不是指线程中的并发,我指的是“同时运行的承诺”中的并发。
-
你尝试了什么?使用等待队列和缓冲请求应该不会太难。
-
@schlingel:我并不是说这很难。准备好后,我将发布完整的代码。我只是想弄清楚如何正确链接承诺,以便下一个开始只要前一个完成。
-
如果请求可以立即执行,您可以返回由进程解决的延迟,如果您必须将其排队,则必须使用两个单独的延迟。一个调用一个减少计数器的函数并另外解决第二个延迟的函数。第二个 deferred 应该由 spawnProcess 函数返回。
标签: javascript node.js concurrency promise q