fetch流式


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
32
33
34
35
36
37
38
39
40
41
42
43
44
async function processStream() {
const response = await fetch('你的流式接口地址');
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
let buffer = '';

while (true) {
const { done, value } = await reader.read();
if (done) break; // 流结束

// 将二进制数据转换为字符串并追加到缓冲区
buffer += decoder.decode(value, { stream: true });

// 按换行符分割缓冲区
const parts = buffer.split('\n');

// 保留未处理的部分(最后一个元素可能不完整)
buffer = parts.pop() || '';

// 处理每个完整的 JSON 对象
for (const part of parts) {
if (part.trim() === '') continue; // 跳过空行
try {
const json = JSON.parse(part);
console.log('收到独立 JSON:', json);
} catch (err) {
console.error('解析 JSON 失败:', err);
}
}
}

// 处理缓冲区剩余内容(如果有)
if (buffer.trim() !== '') {
try {
const json = JSON.parse(buffer);
console.log('最后一条 JSON:', json);
} catch (err) {
console.error('解析末尾 JSON 失败:', err);
}
}
}

// 调用函数
processStream();