From 96c4e7d88a6b6fb45cd0b29b76a54b65b8b7eb5f Mon Sep 17 00:00:00 2001 From: wonder Date: Fri, 19 Jun 2026 22:39:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=98=B2=E6=AD=A2=20SSE=20=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=20done=20=E4=BA=8B=E4=BB=B6=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E4=B8=A4=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/sse.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/static/js/sse.js b/static/js/sse.js index a73abbb..7039c98 100644 --- a/static/js/sse.js +++ b/static/js/sse.js @@ -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 });