A library that performs rate limiting when executing a list of asynchronous processes.
$ npm install rate-limit-delay-promise
Call RateLimitDelayPromise.all()
instead of Promise.all()
.
function main() {
const masters = [1,2,3];
const promises: Promise<string>[] = masters.map(DummyRemoteProcess.requestMaster);
Promise.all(promises).then(console.log);
}
class DummyRemoteProcess {
static requestMaster(master: number): Promise<string> {
switch (master) {
case 1:
return Promise.resolve('one');
case 2:
return Promise.resolve('two');
case 3:
return Promise.resolve('three');
default:
throw new Error('Invalid master number');
}
}
}
main();
It is very useful, but if the external API requestMaster
has a rate limit, you need a mechanism to reduce the frequency of requests. Use the library as follows:
import { RateLimitDelayPromise } from 'rate-limit-delay-promise';
function limitMain(){
const masters = [1,2,3];
RateLimitDelayPromise.all(masters, DummyRemoteProcess.requestMaster, 2000)
.then(console.log);
}
class DummyRemoteProcess {
static requestMaster(master: number): Promise<string> {
switch (master) {
case 1:
return Promise.resolve('one');
case 2:
return Promise.resolve('two');
case 3:
return Promise.resolve('three');
default:
throw new Error('Invalid master number');
}
}
}
limitMain();
$ ts-node check.ts
!!WARNING: Overall execution time will be increased by your delay, of course.
MIT