javascript - 如何限制 Q Promise 并发?

标签 javascript node.js concurrency promise q

如何编写限制 Q Promise 并发的方法?

例如,我有一个方法 spawnProcess。它返回一个 Q promise 。
我希望一次生成的进程不超过 5 个,但对调用代码透明。

我需要实现的是一个带有签名的函数

function limitConcurrency(promiseFactory, limit)

我可以这样称呼

spawnProcess = limitConcurrency(spawnProcess, 5);

// use spawnProcess as usual

我已经开始研究我的版本,但我想知道是否有人有一个简明的实现,我可以检查一下。

最佳答案

我有一个图书馆可以为你做这件事 https://github.com/ForbesLindesay/throat

您可以通过 browserify 使用它或从 brcdn ( https://www.brcdn.org/?module=throat&version=latest ) 下载独立构建并将其添加为脚本标签。

然后(假设 Promise 构造函数在你的环境中被填充或实现)你可以这样做:

//remove this line if using standalone build
var throat = require('throat');

function limitConcurrency(promiseFactory, limit) {
  var fn = throat(promiseFactory, limit);
  return function () {
    return Q(fn.apply(this, arguments));
  }
}

您可以直接调用 throat(promiseFactory, limit) 但这会返回 promise promise 而不是 Q promise 。

我也很喜欢将它与 array.map 一起使用。

// only allow 3 parallel downloads
var downloadedItems = Q.all(items.map(throat(download, 3)));

关于javascript - 如何限制 Q Promise 并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20546373/

相关文章:

javascript - Chrome ://Invalid Scheme

javascript - 从 $getJSON 加载下拉值

node.js - 如何在 knex 模式中指定浮点精度?

node.js - 尝试在 Express JS 中使用 Mustache 时出现 TypeError : this. 引擎不是函数

javascript - MongoDb 字段加密

javascript - 将脚本应用于多组 2 个下拉菜单

javascript - 关于javascript中的函数

java - 法线贴图上的双重锁定 - 这安全吗?

java - 带有 HttpSessionListener 的 session 计数器和 session 计数变量访问

java - 等待计算值(或超时)的高效并发数据结构