javascript / expert
Snippet
Async-Generator-Pipeline-Steuerung zum Schutz von React-UIs vor Rate-Limit-Überlastung
Async-Generatoren liefern Elemente asynchron über die Zeit ab. Dies ermöglicht individuelle Steuerfluss-Algorithmen zur clientseitigen Rate-Limitierung und Anfrage-Drosselung in React. Die Nutzung eines `AsyncGenerator` mit `for await...of` in einem `useEffect`-Hook garantiert Backpressure-Handling und verhindert API-Überlastungen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { useEffect } from 'react';async function* rateLimitedQueue(requests: string[], delayMs: number): AsyncGenerator<string, void, unknown> {for (const req of requests) {yield req;await new Promise(resolve => setTimeout(resolve, delayMs));}}export function useBatchProcessor(items: string[], onProcess: (item: string) => void) {useEffect(() => {let active = true;(async () => {for await (const item of rateLimitedQueue(items, 300)) {if (!active) break;onProcess(item);}})();return () => { active = false; };}, [items, onProcess]);}
react
Erklärung
1
async function* rateLimitedQueue(requests: string[], delayMs: number): AsyncGenerator<string, void, unknown>
Erstellt eine asynchrone Generator-Funktion, die Elemente sequentiell mit erzwungenen Verzögerungsintervallen ausgibt.
2
for await (const item of rateLimitedQueue(items, 300)) {
Konsumiert das Async-Generator-Iterable innerhalb des React-Lebenszyklus und steuert das Anfrage-Timing.
3
return () => { active = false; };
Implementiert ein Stornierungs-Flag, um Statusaktualisierungen zu verhindern, falls die React-Komponente während des Streams entladen wird.