javascript / expert
Snippet
Steuerung des Asynchronen Generator-Ablaufs mit Symbol.asyncIterator für Gestückelte Stream-Transformationen in Next.js
Dieses Snippet demonstriert die Implementierung einer benutzerdefinierten Objektklasse mit einem [Symbol.asyncIterator] Generator-Protokoll zur Steuerung der Stream-Chunk-Iteration in einem Next.js App Router Route Handler. Durch das Einpacken des ReadableStreamDefaultReader in einen asynchronen Generator gibt die Bereinigungslogik im finally-Block die Stream-Sperre bei Ende oder Abbruch sauber frei.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
export class ChunkStreamConsumer {constructor(readableStream) {this.reader = readableStream.getReader();}async *[Symbol.asyncIterator]() {try {while (true) {const { done, value } = await this.reader.read();if (done) break;yield value;}} finally {this.reader.releaseLock();}}}export async function POST(req) {const consumer = new ChunkStreamConsumer(req.body);let totalBytes = 0;for await (const chunk of consumer) {totalBytes += chunk.byteLength;}return Response.json({ processedBytes: totalBytes });}
nextjs
Erklärung
1
async *[Symbol.asyncIterator]() {
Definiert ein asynchrones Generator-Protokoll für die Nutzung in einer for-await-of-Schleife.
2
const { done, value } = await this.reader.read();
Liest eingehende binäre Chunks asynchron aus dem Stream-Reader-Zustand.
3
this.reader.releaseLock();
Stellt die Ressourcenbereinigung sicher, indem die Reader-Sperre beim Verlassen des Generators freigegeben wird.