function asyncRateLimit<TFn>(fn, initialOptions): (...args) => Promise<undefined | ReturnType<TFn>>
function asyncRateLimit<TFn>(fn, initialOptions): (...args) => Promise<undefined | ReturnType<TFn>>
Definiert in: async-rate-limiter.ts:539
Erstellt eine asynchrone ratenbegrenzte Funktion, die die bereitgestellte Funktion bis zu einer maximalen Anzahl von Malen innerhalb eines Zeitfensters ausführt.
Im Gegensatz zum nicht-asynchronen Ratenbegrenzer unterstützt diese asynchrone Version die Rückgabe von Werten aus der ratenbegrenzten Funktion, was sie ideal für API-Aufrufe und andere asynchrone Operationen macht, bei denen Sie das Ergebnis des maybeExecute-Aufrufs anstelle der Festlegung des Ergebnisses in einer Zustandsvariable innerhalb der ratenbegrenzten Funktion wünschen.
Der Ratenbegrenzer unterstützt zwei Arten von Fenstern
Beachten Sie, dass Ratenbegrenzung eine einfachere Form der Ausführungskontrolle im Vergleich zu Throttling oder Debouncing ist
Zustandsverwaltung
Erwägen Sie die Verwendung von throttle() oder debounce(), wenn Sie eine intelligentere Ausführungskontrolle benötigen. Verwenden Sie Ratenbegrenzung, wenn Sie speziell eine harte Grenze für die Anzahl der Ausführungen innerhalb eines Zeitraums durchsetzen müssen.
Fehlerbehandlung
• TFn erbt von AnyAsyncFunction
TFn
Funktion
Versucht, die ratenbegrenzte Funktion auszuführen, wenn sie innerhalb der konfigurierten Grenzen liegt. Die Ausführung wird zurückgewiesen, wenn die Anzahl der Aufrufe im aktuellen Fenster das Limit überschreitet.
Fehlerbehandlung
...Parameters<TFn>
Promise<undefined | ReturnType<TFn>>
Ein Promise, das mit dem Rückgabewert der Funktion aufgelöst wird oder undefined, wenn ein Fehler aufgetreten und von onError behandelt wurde
Der Fehler aus der ratenbegrenzten Funktion, wenn kein onError-Handler konfiguriert ist
const rateLimiter = new AsyncRateLimiter(fn, { limit: 5, window: 1000 });
// First 5 calls will return a promise that resolves with the result
const result = await rateLimiter.maybeExecute('arg1', 'arg2');
// Additional calls within the window will return undefined
const result2 = await rateLimiter.maybeExecute('arg1', 'arg2'); // undefined
const rateLimiter = new AsyncRateLimiter(fn, { limit: 5, window: 1000 });
// First 5 calls will return a promise that resolves with the result
const result = await rateLimiter.maybeExecute('arg1', 'arg2');
// Additional calls within the window will return undefined
const result2 = await rateLimiter.maybeExecute('arg1', 'arg2'); // undefined
// Rate limit to 5 calls per minute with a sliding window
const rateLimited = asyncRateLimit(makeApiCall, {
limit: 5,
window: 60000,
windowType: 'sliding',
onError: (error) => {
console.error('API call failed:', error);
},
onReject: (rateLimiter) => {
console.log(`Rate limit exceeded. Try again in ${rateLimiter.getMsUntilNextWindow()}ms`);
}
});
// First 5 calls will execute immediately
// Additional calls will be rejected until the minute window resets
// Returns the API response directly
const result = 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 with a sliding window
const rateLimited = asyncRateLimit(makeApiCall, {
limit: 5,
window: 60000,
windowType: 'sliding',
onError: (error) => {
console.error('API call failed:', error);
},
onReject: (rateLimiter) => {
console.log(`Rate limit exceeded. Try again in ${rateLimiter.getMsUntilNextWindow()}ms`);
}
});
// First 5 calls will execute immediately
// Additional calls will be rejected until the minute window resets
// Returns the API response directly
const result = await rateLimited();
// For more even execution, consider using throttle instead:
const throttled = throttle(makeApiCall, { wait: 12000 }); // One call every 12 seconds
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.