Qew
A tiny library for queuing and throttling asynchronous functions.
Perfect for managing resource-intensive processes and controlling access to rate-limited APIs.
This project has 0 (zero) runtime dependencies 👌.
Installation
Qew is available on npm. Install via
$ npm install qew
or
$ yarn add qew
API
new Qew(maxConcurrency=1, delayOrDelayFunc=0)
The constructor's type signature is
constructor QewmaxConcurrency: number = 1, delay: number | number = 0: Qew;
Examples
; ; // maxConcurrency of 1, delay of 0ms; // maxConcurrency of 3, delay of 0ms; // maxConcurrency of 2, delay of 250ms between end and start of functions
The delay parameter doesn't need to be a hardcoded number, you can also pass in a function that returns a number.
; ;// maxConcurrency of 2, delay will be a new random value between 0ms and 1000ms
Qew.push(asyncFunction)
Type signature
Qew.pushasyncFunc:Promise<T>: Promise<T>;
Examples
// returns a promise, that runs when it is its turn in the queue.// will resolve or reject depending on asyncFunc's resolution; prom .then... .catch...; // `push`'s result can also be `await`ed in an async function like any promise
Use cases
Accessing rate-limited APIs
Basic example, queuing individual asynchronous functions.
; // for API that has a rate limit of 10 reqs/sec qew.pushaccessApi"a".thencallback;qew.pushaccessApi"b".thencallback;qew.pushaccessApi"c".thencallback;
Methods and type signatures
constructor QewmaxConcurrent: number = 1, delay: number | number = 0: Qew; Qew.pushasyncFunc:Promise<T>: Promise<T>;
Contributing
Contributions are welcome! Feel free to file an issue or submit a pull request.