limit-concurrency-decorator

Decorator to limit concurrency of async functions
Similar to these libraries, but can be used as decorator:
Also similar to
p-concurrency, but the
limit can be enforced over multiple functions.
Install
Installation of the npm package:
> npm install --save limit-concurrency-decorator
Usage
Simply apply the decorator to a method:
import { limitConcurrency } from "limit-concurrency-decorator";
class HttpClient {
@limitConcurrency(2)
get() {
}
}
const client = new HttpClient();
client.get("http://example.net/");
client.get("http://example2.net/");
client.get("http://example3.net/");
Or a simple function as a wrapper:
import httpRequest from "http-request-plus";
const httpRequestLimited = limitConcurrency(2)(httpRequest);
httpRequestLimited("http://example.net/");
httpRequestLimited("http://example2.net/");
httpRequestLimited("http://example3.net/");
Or even as a call limiter:
const limiter = limitConcurrency(2)();
limiter(asyncFn, param1, ...);
limiter.call(thisArg, asyncFn, param1, ...);
limiter.call(thisArg, methodName, param1, ...)
The limit can be shared:
const myLimit = limitConcurrency(2);
class HttpClient {
@myLimit
post() {
}
@myLimit
put() {
}
}
With FAIL_ON_QUEUE
you can fail early instead of waiting:
import { FAIL_ON_QUEUE } from "limit-concurrency-decorator";
try {
await httpRequestLimited(FAIL_ON_QUEUE, "http://example2.net");
} catch (error) {
error.message;
}
Custom termination:
const httpRequestLimited = limitConcurrency(2, async (promise) => {
const stream = await promise;
await new Promise((resolve) => {
stream.on("end", resolve);
stream.on("error", reject);
});
})(httpRequest);
httpRequestLimited("http://example.net/");
httpRequestLimited("http://example2.net/");
httpRequestLimited("http://example3.net/");
Contributions
Contributions are very welcomed, either on the documentation or on
the code.
You may:
- report any issue
you've encountered;
- fork and create a pull request.
License
ISC © Julien Fontanet