+
- {{ loadingText }}
+ {{ loadingText }}
@@ -795,7 +795,7 @@ export default {
const donePayload = this.parseStreamPayload(event);
if (donePayload && donePayload.error) {
this.markResponseError(responseEntry, donePayload.error);
- } else if (responseEntry && responseEntry.status !== 'error' && responseEntry.rawOutput) {
+ } else if (responseEntry && responseEntry.status !== 'error') {
responseEntry.status = 'completed';
}
this.releaseSSEClient(sse);
@@ -803,6 +803,13 @@ export default {
this.saveCurrentSession();
break;
}
+ }, () => {
+ // SSE 连接失败(重试次数用完)时的回调
+ if (responseEntry && responseEntry.status === 'streaming') {
+ responseEntry.status = 'completed';
+ }
+ this.releaseSSEClient(sse);
+ this.saveCurrentSession();
});
return sse;
},
diff --git a/resources/assets/js/utils/index.js b/resources/assets/js/utils/index.js
index fd06a2a85..85d2f6644 100644
--- a/resources/assets/js/utils/index.js
+++ b/resources/assets/js/utils/index.js
@@ -118,42 +118,44 @@ export class SSEClient {
};
}
- _onError(type, handler) {
+ _onError(type, handler, onFailed) {
return () => {
if (window.systemInfo.debug === "yes") {
console.log("SSE retry: " + this.url);
}
if (this.es) {
- this._removeAllEvent(type, handler);
+ this._removeAllEvent(type, handler, onFailed);
this.unsunscribe();
}
if (this.retry > 0) {
this.retry--;
this.timer = setTimeout(() => {
- this.subscribe(type, handler);
+ this.subscribe(type, handler, onFailed);
}, this.options.interval);
+ } else if (typeof onFailed === 'function') {
+ onFailed();
}
};
}
- _removeAllEvent(type, handler) {
+ _removeAllEvent(type, handler, onFailed) {
type = $A.isArray(type) ? type : [type]
this.es.removeEventListener("open", this._onOpen);
type.some(item => {
this.es.removeEventListener(item, this._onMessage(item, handler));
})
- this.es.removeEventListener("error", this._onError(type, handler));
+ this.es.removeEventListener("error", this._onError(type, handler, onFailed));
}
- subscribe(type, handler) {
+ subscribe(type, handler, onFailed) {
type = $A.isArray(type) ? type : [type]
this.es = new EventSource(this.url);
this.es.addEventListener("open", this._onOpen);
type.some(item => {
this.es.addEventListener(item, this._onMessage(item, handler));
})
- this.es.addEventListener("error", this._onError(type, handler));
+ this.es.addEventListener("error", this._onError(type, handler, onFailed));
}
unsunscribe() {