Defined in: async-rate-limiter.ts:127
A class that creates an async rate-limited function.
Rate limiting is a simple approach that allows a function to execute up to a limit within a time window, then blocks all subsequent calls until the window passes. This can lead to "bursty" behavior where all executions happen immediately, followed by a complete block.
The rate limiter supports two types of windows:
Unlike the non-async RateLimiter, this async version supports returning values from the rate-limited function, making it ideal for API calls and other async operations where you want the result of the maybeExecute call instead of setting the result on a state variable from within the rate-limited function.
For smoother execution patterns, consider using:
Rate limiting is best used for hard API limits or resource constraints. For UI updates or smoothing out frequent events, throttling or debouncing usually provide better user experience.
Error Handling:
const rateLimiter = new AsyncRateLimiter(
async (id: string) => await api.getData(id),
{
limit: 5,
window: 1000,
windowType: 'sliding',
onError: (error) => {
console.error('API call failed:', error);
},
onReject: (limiter) => {
console.log(`Rate limit exceeded. Try again in ${limiter.getMsUntilNextWindow()}ms`);
}
}
);
// Will execute immediately until limit reached, then block
// Returns the API response directly
const data = await rateLimiter.maybeExecute('123');
const rateLimiter = new AsyncRateLimiter(
async (id: string) => await api.getData(id),
{
limit: 5,
window: 1000,
windowType: 'sliding',
onError: (error) => {
console.error('API call failed:', error);
},
onReject: (limiter) => {
console.log(`Rate limit exceeded. Try again in ${limiter.getMsUntilNextWindow()}ms`);
}
}
);
// Will execute immediately until limit reached, then block
// Returns the API response directly
const data = await rateLimiter.maybeExecute('123');
• TFn extends AnyAsyncFunction
new AsyncRateLimiter<TFn>(fn, initialOptions): AsyncRateLimiter<TFn>
new AsyncRateLimiter<TFn>(fn, initialOptions): AsyncRateLimiter<TFn>
Defined in: async-rate-limiter.ts:137
TFn
AsyncRateLimiter<TFn>
getEnabled(): boolean
getEnabled(): boolean
Defined in: async-rate-limiter.ts:166
Returns the current enabled state of the rate limiter
boolean
getErrorCount(): number
getErrorCount(): number
Defined in: async-rate-limiter.ts:325
Returns the number of times the function has errored
number
getIsExecuting(): boolean
getIsExecuting(): boolean
Defined in: async-rate-limiter.ts:339
Returns whether the function is currently executing
boolean
getLimit(): number
getLimit(): number
Defined in: async-rate-limiter.ts:173
Returns the current limit of executions allowed within the time window
number
getMsUntilNextWindow(): number
getMsUntilNextWindow(): number
Defined in: async-rate-limiter.ts:300
Returns the number of milliseconds until the next execution will be possible For fixed windows, this is the time until the current window resets For sliding windows, this is the time until the oldest execution expires
number
getOptions(): AsyncRateLimiterOptions<TFn>
getOptions(): AsyncRateLimiterOptions<TFn>
Defined in: async-rate-limiter.ts:159
Returns the current rate limiter options
getRejectionCount(): number
getRejectionCount(): number
Defined in: async-rate-limiter.ts:332
Returns the number of times the function has been rejected
number
getRemainingInWindow(): number
getRemainingInWindow(): number
Defined in: async-rate-limiter.ts:290
Returns the number of remaining executions allowed in the current window
number
getSettleCount(): number
getSettleCount(): number
Defined in: async-rate-limiter.ts:318
Returns the number of times the function has been settled
number
getSuccessCount(): number
getSuccessCount(): number
Defined in: async-rate-limiter.ts:311
Returns the number of times the function has been executed
number
getWindow(): number
getWindow(): number
Defined in: async-rate-limiter.ts:180
Returns the current time window in milliseconds
number
maybeExecute(...args): Promise<undefined | ReturnType<TFn>>
maybeExecute(...args): Promise<undefined | ReturnType<TFn>>
Defined in: async-rate-limiter.ts:213
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.
Error Handling:
...Parameters<TFn>
Promise<undefined | ReturnType<TFn>>
A promise that resolves with the function's return value, or undefined if an error occurred and was handled by onError
The error from the rate-limited function if no onError handler is configured
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
reset(): void
reset(): void
Defined in: async-rate-limiter.ts:346
Resets the rate limiter state
void
setOptions(newOptions): void
setOptions(newOptions): void
Defined in: async-rate-limiter.ts:152
Updates the rate limiter options Returns the new options state
Partial<AsyncRateLimiterOptions<TFn>>
void
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.