Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b9a026ed
authored
Jun 11, 2025
by
RedwindA
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🔧
fix(useApiRequest): improve playground SSE error handling and stream completion tracking
parent
d6276937
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
16 deletions
+22
-16
web/src/hooks/useApiRequest.js
+22
-16
No files found.
web/src/hooks/useApiRequest.js
View file @
b9a026ed
...
...
@@ -246,9 +246,11 @@ export const useApiRequest = (
let
responseData
=
''
;
let
hasReceivedFirstResponse
=
false
;
let
isStreamComplete
=
false
;
// 添加标志位跟踪流是否正常完成
source
.
addEventListener
(
'message'
,
(
e
)
=>
{
if
(
e
.
data
===
'[DONE]'
)
{
isStreamComplete
=
true
;
// 标记流正常完成
source
.
close
();
sseSourceRef
.
current
=
null
;
setDebugData
(
prev
=>
({
...
prev
,
response
:
responseData
}));
...
...
@@ -290,26 +292,30 @@ export const useApiRequest = (
});
source
.
addEventListener
(
'error'
,
(
e
)
=>
{
console
.
error
(
'SSE Error:'
,
e
);
const
errorMessage
=
e
.
data
||
t
(
'请求发生错误'
);
// 只有在流没有正常完成且连接状态异常时才处理错误
if
(
!
isStreamComplete
&&
source
.
readyState
!==
2
)
{
console
.
error
(
'SSE Error:'
,
e
);
const
errorMessage
=
e
.
data
||
t
(
'请求发生错误'
);
const
errorInfo
=
handleApiError
(
new
Error
(
errorMessage
));
errorInfo
.
readyState
=
source
.
readyState
;
const
errorInfo
=
handleApiError
(
new
Error
(
errorMessage
));
errorInfo
.
readyState
=
source
.
readyState
;
setDebugData
(
prev
=>
({
...
prev
,
response
:
responseData
+
'\n\nSSE Error:\n'
+
JSON
.
stringify
(
errorInfo
,
null
,
2
)
}));
setActiveDebugTab
(
DEBUG_TABS
.
RESPONSE
);
setDebugData
(
prev
=>
({
...
prev
,
response
:
responseData
+
'\n\nSSE Error:\n'
+
JSON
.
stringify
(
errorInfo
,
null
,
2
)
}));
setActiveDebugTab
(
DEBUG_TABS
.
RESPONSE
);
streamMessageUpdate
(
errorMessage
,
'content'
);
completeMessage
(
MESSAGE_STATUS
.
ERROR
);
sseSourceRef
.
current
=
null
;
source
.
close
();
streamMessageUpdate
(
errorMessage
,
'content'
);
completeMessage
(
MESSAGE_STATUS
.
ERROR
);
sseSourceRef
.
current
=
null
;
source
.
close
();
}
});
source
.
addEventListener
(
'readystatechange'
,
(
e
)
=>
{
if
(
e
.
readyState
>=
2
&&
source
.
status
!==
undefined
&&
source
.
status
!==
200
)
{
// 检查 HTTP 状态错误,但避免与正常关闭重复处理
if
(
e
.
readyState
>=
2
&&
source
.
status
!==
undefined
&&
source
.
status
!==
200
&&
!
isStreamComplete
)
{
const
errorInfo
=
handleApiError
(
new
Error
(
'HTTP状态错误'
));
errorInfo
.
status
=
source
.
status
;
errorInfo
.
readyState
=
source
.
readyState
;
...
...
@@ -401,4 +407,4 @@ export const useApiRequest = (
streamMessageUpdate
,
completeMessage
,
};
};
\ No newline at end of file
};
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment