javascript / expert
Snippet
Verarbeitung von Async-Generator-Streams in Array-Zustandspuffer
Die Kombination asynchroner Generatorfunktionen (`async function*`) mit `for await...of`-Schleifen ermöglicht das unterbrechungsfreie Streaming von Daten direkt in React-Array-Puffer. Generierte String-Arrays werden schrittweise im Zustand zusammengeführt, während Cleanup-Flags vor Race Conditions schützen.
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
27
28
29
30
31
import React, { useState, useEffect } from 'react';async function* fetchChunkStream(url) {const response = await fetch(url);const reader = response.body.getReader();const decoder = new TextDecoder();while (true) {const { done, value } = await reader.read();if (done) break;yield decoder.decode(value).trim().split('\n');}}export function StreamDataViewer({ endpoint }) {const [dataLines, setDataLines] = useState([]);useEffect(() => {let active = true;async function consumeStream() {for await (const chunkArray of fetchChunkStream(endpoint)) {if (!active) break;setDataLines(prev => prev.concat(chunkArray));}}consumeStream();return () => { active = false; };}, [endpoint]);return <ul>{dataLines.map((line, i) => <li key={i}>{line}</li>)}</ul>;}
react
Erklärung
1
async function* fetchChunkStream(url) {
Definiert eine asynchrone Generatorfunktion, die Arrays aus dekodierten Strings liefert, sobald Chunks vom ReadableStream eintreffen.
2
for await (const chunkArray of fetchChunkStream(endpoint)) {
Iteriert asynchron über jedes generierte Array-Chunk aus dem Generator-Stream.
3
setDataLines(prev => prev.concat(chunkArray));
Fügt neue eingehende Array-Elemente mittels unveränderlichem concat dem bestehenden Array-Zustand hinzu.