Dan*_*mov 12 javascript concurrency node.js promise q
如何编写限制Q promise并发的方法?
例如,我有一个方法spawnProcess
.它返回一个Q承诺.
我希望一次生成的进程不超过5个,但对调用代码透明.
我需要实现的是一个带签名的函数
function limitConcurrency(promiseFactory, limit)
Run Code Online (Sandbox Code Playgroud)
我可以这样打电话
spawnProcess = limitConcurrency(spawnProcess, 5);
// use spawnProcess as usual
Run Code Online (Sandbox Code Playgroud)
我已经开始研究我的版本,但我想知道是否有人有一个我可以检查的简洁实现.
我有一个库为你做这个https://github.com/ForbesLindesay/throat
您可以通过browserify使用它或从brcdn(https://www.brcdn.org/?module=throat&version=latest)下载独立版本并将其添加为脚本标记.
然后(假设Promise
构造函数是polyfilled或在您的环境中实现),您可以:
//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));
}
}
Run Code Online (Sandbox Code Playgroud)
你可以直接打电话throat(promiseFactory, limit)
,但这会返回一个承诺承诺,而不是一个Q承诺.
我也非常喜欢将它与array.map一起使用.
// only allow 3 parallel downloads
var downloadedItems = Q.all(items.map(throat(download, 3)));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4439 次 |
最近记录: |