handle partial chunk

This commit is contained in:
2023-06-19 20:33:18 +08:00
parent da31f32fcb
commit 66ab8d4978

View File

@@ -40,13 +40,14 @@ export default function ChatBOX(props: {
const allChunkMessage: string[] = []; const allChunkMessage: string[] = [];
new ReadableStream({ new ReadableStream({
async start() { async start() {
let lastText = "";
while (true) { while (true) {
let responseDone = false; let responseDone = false;
let state = await reader?.read(); let state = await reader?.read();
let done = state?.done; let done = state?.done;
let value = state?.value; let value = state?.value;
if (done) break; if (done) break;
let text = new TextDecoder().decode(value); let text = lastText + new TextDecoder().decode(value);
// console.log("text:", text); // console.log("text:", text);
const lines = text const lines = text
.trim() .trim()
@@ -63,7 +64,15 @@ export default function ChatBOX(props: {
console.log("lines", lines); console.log("lines", lines);
const jsons: ChunkMessage[] = lines const jsons: ChunkMessage[] = lines
.map((line) => { .map((line) => {
return JSON.parse(line.trim().slice("data:".length)); try {
const ret = JSON.parse(line.trim().slice("data:".length));
lastText = "";
return ret;
} catch (e) {
console.log(`Chunk parse error at: ${line}`);
lastText = line;
return null;
}
}) })
.filter((i) => i); .filter((i) => i);
console.log("jsons", jsons); console.log("jsons", jsons);