mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 07:47:07 +00:00
Add @dougal/concurrency module
This commit is contained in:
25
lib/modules/@dougal/concurrency/index.js
Normal file
25
lib/modules/@dougal/concurrency/index.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
class ConcurrencyLimiter {
|
||||||
|
|
||||||
|
constructor(maxConcurrent) {
|
||||||
|
this.maxConcurrent = maxConcurrent;
|
||||||
|
this.active = 0;
|
||||||
|
this.queue = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
async enqueue(task) {
|
||||||
|
if (this.active >= this.maxConcurrent) {
|
||||||
|
await new Promise(resolve => this.queue.push(resolve));
|
||||||
|
}
|
||||||
|
this.active++;
|
||||||
|
try {
|
||||||
|
return await task();
|
||||||
|
} finally {
|
||||||
|
this.active--;
|
||||||
|
if (this.queue.length > 0) {
|
||||||
|
this.queue.shift()();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ConcurrencyLimiter;
|
||||||
12
lib/modules/@dougal/concurrency/package.json
Normal file
12
lib/modules/@dougal/concurrency/package.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "@dougal/concurrency",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user