Framework
Version
Debouncer API Referenz
Throttler API Referenz
Rate Limiter API Referenz
Queue API Referenz
Batcher API Referenz

useAsyncRateLimitedCallback

Funktion: useAsyncRateLimitedCallback()

ts
function useAsyncRateLimitedCallback<TFn>(fn, options): (...args) => Promise<ReturnType<TFn>>
function useAsyncRateLimitedCallback<TFn>(fn, options): (...args) => Promise<ReturnType<TFn>>

Definiert in: react-pacer/src/async-rate-limiter/useAsyncRateLimitedCallback.ts:59

Ein React-Hook, der eine ratenbegrenzte Version einer asynchronen Callback-Funktion erstellt. Dieser Hook ist ein praktischer Wrapper um den Hook useAsyncRateLimiter und stellt eine stabile, asynchron ratenbegrenzte Funktionsreferenz für die Verwendung in React-Komponenten bereit.

Asynchrone Ratenbegrenzung ist ein "Hard Limit"-Ansatz für asynchrone Funktionen: Sie erlaubt alle Aufrufe bis zum Erreichen des Limits und blockiert dann (lehnt ab) nachfolgende Aufrufe, bis das Fenster zurückgesetzt wird. Im Gegensatz zu Throttling oder Debouncing versucht sie nicht, Aufrufe zu verteilen oder zusammenzufassen. Dies kann zu Bursts schneller Ausführungen führen, gefolgt von Perioden, in denen alle Aufrufe blockiert sind.

Der asynchrone Ratenbegrenzer unterstützt zwei Arten von Fenstern

  • 'fixed': Ein striktes Fenster, das nach Ablauf des Zeitfensters zurückgesetzt wird. Alle Ausführungen innerhalb des Fensters zählen für das Limit, und das Fenster wird nach Ablauf der Periode vollständig zurückgesetzt.
  • 'sliding': Ein rollierendes Fenster, das Ausführungen ermöglicht, sobald ältere abgelaufen sind. Dies sorgt für eine konsistentere Ausführungsrate im Laufe der Zeit.

Für flüssigere Ausführungsmuster sollten Sie in Betracht ziehen:

  • useAsyncThrottledCallback: Wenn Sie eine gleichmäßige Verteilung zwischen den Ausführungen wünschen (z. B. UI-Updates)
  • useAsyncDebouncedCallback: Wenn Sie schnelle Aufrufe zu einer einzigen Ausführung zusammenfassen möchten (z. B. Suchfeld)

Asynchrone Ratenbegrenzung sollte hauptsächlich verwendet werden, wenn Sie strenge Limits für asynchrone Operationen erzwingen müssen, wie z. B. API-Ratenbegrenzungen oder andere Szenarien, die harte Obergrenzen für die Ausführungsfrequenz erfordern.

Dieser Hook bietet eine einfachere API im Vergleich zu useAsyncRateLimiter, was ihn ideal für grundlegende asynchrone Ratenbegrenzungsbedürfnisse macht. Er gibt jedoch nicht die zugrunde liegende AsyncRateLimiter-Instanz preis.

Für fortgeschrittene Anwendungsfälle, die Funktionen wie

  • Manuelle Abbrechung
  • Zugriff auf Ausführungszähler
  • Benutzerdefinierte useCallback-Abhängigkeiten

Erwägen Sie stattdessen die Verwendung des Hooks useAsyncRateLimiter.

Typparameter

TFn extends AnyAsyncFunction

Parameter

fn

TFn

optionen

AsyncRateLimiterOptions<TFn>

Gibt zurück

Funktion

Parameter

args

...Parameters<TFn>

Gibt zurück

Promise<ReturnType<TFn>>

Beispiel

tsx
// Rate limit async API calls to maximum 5 calls per minute with a sliding window
const makeApiCall = useAsyncRateLimitedCallback(
  async (data: ApiData) => {
    return fetch('/api/endpoint', { method: 'POST', body: JSON.stringify(data) });
  },
  {
    limit: 5,
    window: 60000, // 1 minute
    windowType: 'sliding',
    onReject: () => {
      console.warn('API rate limit reached. Please wait before trying again.');
    }
  }
);
// Rate limit async API calls to maximum 5 calls per minute with a sliding window
const makeApiCall = useAsyncRateLimitedCallback(
  async (data: ApiData) => {
    return fetch('/api/endpoint', { method: 'POST', body: JSON.stringify(data) });
  },
  {
    limit: 5,
    window: 60000, // 1 minute
    windowType: 'sliding',
    onReject: () => {
      console.warn('API rate limit reached. Please wait before trying again.');
    }
  }
);
Unsere Partner
Code Rabbit
Unkey
Bytes abonnieren

Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.

Bytes

Kein Spam. Jederzeit kündbar.

Bytes abonnieren

Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.

Bytes

Kein Spam. Jederzeit kündbar.