limit-concurrency-decorator
Advanced tools
Weekly downloads
Readme
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.
Installation of the npm package:
> npm install --save limit-concurrency-decorator
Simply apply the decorator to a method:
import { limitConcurrency } from "limit-concurrency-decorator";
class HttpClient {
@limitConcurrency(2)
get() {
// ...
}
}
const client = new HttpClient();
// these calls will run in parallel
client.get("http://example.net/");
client.get("http://example2.net/");
// this call will wait for one of the 2 previous to finish
client.get("http://example3.net/");
Or a simple function as a wrapper:
import httpRequest from "http-request-plus";
const httpRequestLimited = limitConcurrency(2)(httpRequest);
// these calls will run in parallel
httpRequestLimited("http://example.net/");
httpRequestLimited("http://example2.net/");
// this call will wait for one of the 2 previous to finish
httpRequestLimited("http://example3.net/");
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; // 'no available place in queue'
}
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);
// these calls will run in parallel
httpRequestLimited("http://example.net/");
httpRequestLimited("http://example2.net/");
// this call will wait for one of the 2 previous responses to have been read entirely
httpRequestLimited("http://example3.net/");
Contributions are very welcomed, either on the documentation or on the code.
You may:
ISC © Julien Fontanet
FAQs
Decorator to limit concurrency of async functions
The npm package limit-concurrency-decorator receives a total of 479 weekly downloads. As such, limit-concurrency-decorator popularity was classified as not popular.
We found that limit-concurrency-decorator demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.