function asyncRateLimit<TFn>(fn, initialOptions): (...args) => Promise<boolean>
function asyncRateLimit<TFn>(fn, initialOptions): (...args) => Promise<boolean>
Defined in: async-rate-limiter.ts:223
Creates an async rate-limited function that will execute the provided function up to a maximum number of times within a time window.
Note that rate limiting is a simpler form of execution control compared to throttling or debouncing:
Consider using throttle() or debounce() if you need more intelligent execution control. Use rate limiting when you specifically need to enforce a hard limit on the number of executions within a time period.
• TFn extends (...args) => Promise<any>
TFn
Omit<AsyncRateLimiterOptions, "enabled">
Function
Attempts to execute the rate-limited function if within the configured limits. Will reject execution if the number of calls in the current window exceeds the limit. If execution is allowed, waits for any previous execution to complete before proceeding.
...Parameters
Promise<boolean>
const rateLimiter = new AsyncRateLimiter(fn, { limit: 5, window: 1000 });
// First 5 calls will execute
await rateLimiter.maybeExecute('arg1', 'arg2');
// Additional calls within the window will be rejected
await rateLimiter.maybeExecute('arg1', 'arg2'); // Rejected
const rateLimiter = new AsyncRateLimiter(fn, { limit: 5, window: 1000 });
// First 5 calls will execute
await rateLimiter.maybeExecute('arg1', 'arg2');
// Additional calls within the window will be rejected
await rateLimiter.maybeExecute('arg1', 'arg2'); // Rejected
// Rate limit to 5 calls per minute
const rateLimited = asyncRateLimit(makeApiCall, {
limit: 5,
window: 60000,
onReject: ({ msUntilNextWindow }) => {
console.log(`Rate limit exceeded. Try again in ${msUntilNextWindow}ms`);
}
});
// First 5 calls will execute immediately
// Additional calls will be rejected until the minute window resets
await rateLimited();
// For more even execution, consider using throttle instead:
const throttled = throttle(makeApiCall, { wait: 12000 }); // One call every 12 seconds
// Rate limit to 5 calls per minute
const rateLimited = asyncRateLimit(makeApiCall, {
limit: 5,
window: 60000,
onReject: ({ msUntilNextWindow }) => {
console.log(`Rate limit exceeded. Try again in ${msUntilNextWindow}ms`);
}
});
// First 5 calls will execute immediately
// Additional calls will be rejected until the minute window resets
await rateLimited();
// For more even execution, consider using throttle instead:
const throttled = throttle(makeApiCall, { wait: 12000 }); // One call every 12 seconds
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.