typescript / intermediate
Snippet
Streaming von Datenströmen mit typisierten asynchronen Generatoren
Asynchrone Generatoren, die mit AsyncGenerator<T, ReturnType, NextType> typisiert sind, ermöglichen die verzögerte Verarbeitung asynchroner Sequenzen. Das sequentielle Verarbeiten von Batches mit for await...of hält den Speicherverbrauch gering.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
interface DataBatch {readonly batchId: number;readonly items: string[];}async function* streamDataBatches(totalBatches: number): AsyncGenerator<DataBatch, void, unknown> {for (let i = 1; i <= totalBatches; i++) {await new Promise(resolve => setTimeout(resolve, 10));yield { batchId: i, items: [`item_${i}A`, `item_${i}B`] };}}async function processStream(): Promise<number> {let totalProcessed = 0;for await (const batch of streamDataBatches(3)) {totalProcessed += batch.items.length;}return totalProcessed;}
Erklärung
1
async function* streamDataBatches(totalBatches: number): AsyncGenerator<DataBatch, void, unknown> {
Deklariert eine asynchrone Generatorfunktion, die DataBatch-Elemente asynchron liefert.
2
yield { batchId: i, items: [`item_${i}A`, `item_${i}B`] };
Übergibt ein Datenpaket an den Aufrufer und pausiert die Generatorausführung.
3
for await (const batch of streamDataBatches(3)) {
Iteriert asynchron über jedes bereitgestellte Datenpaket, sobald es verfügbar ist.
4
totalProcessed += batch.items.length;
Akkumuliert Ergebnisse in Echtzeit, ohne alle Pakete gleichzeitig im Speicher abzulegen.