fix: 防止 SSE 客户端 done 事件触发两次

This commit is contained in:
2026-06-19 22:39:31 +08:00
parent ba46b1479b
commit 96c4e7d88a
+6 -2
View File
@@ -41,6 +41,7 @@ const SSE = {
const decoder = new TextDecoder();
let buffer = '';
let currentEvent = '';
let doneReceived = false;
while (true) {
const { done, value } = await reader.read();
@@ -62,6 +63,9 @@ const SSE = {
data = raw;
}
// Track explicit done event from backend
if (currentEvent === 'done') doneReceived = true;
// Call the matching handler
if (currentEvent && handlers[currentEvent]) {
handlers[currentEvent](data);
@@ -70,8 +74,8 @@ const SSE = {
}
}
// Stream ended
if (handlers.done) handlers.done();
// Stream ended — only fire done if backend didn't send an explicit one
if (handlers.done && !doneReceived) handlers.done();
} catch (err) {
if (err.name === 'AbortError') return;
if (handlers.error) handlers.error({ message: err.message });