这个就是全部代码,通过ref调用stopChat方法中的this.ctrl?.abort();,在IOS端无法停止,onmessage这个回调还是会一直输出,这是为啥啊
<script>
export default {
props: {},
data() {
return {
stopCount: 0,
renderjsData: {
url: "",
key: 0,
body: ""
}
}
},
methods: {
stopChat() {
this.stopCount += 1
},
/**
- 开始chat对话
- @param body
- @param url
-
@param headers
*/
startChat({
body,
url,
headers = {}
}) {
this.renderjsData = Object.assign({}, this.renderjsData, {
key: this.renderjsData.key + 1,
body: JSON.stringify(body),
url: url,
headers
});
},open() { this.$emit("onOpen") }, message(msg) { this.$emit("onMessage", msg) }, error(err) { this.$emit("onError", err) }, finish() { this.$emit("onFinish") } },
}
</script>
<script module="chat" lang="renderjs">
import {
fetchEventSource
} from '@microsoft/fetch-event-source';
export default {
data() {
return {
ctrl: null,
eventSourceInstance: null
}
},
methods: {
/**
* 停止生成
*/
stopChatCore() {
console.log('组件中停止ai', this.ctrl)
this.ctrl?.abort();
this.ctrl = null;
this.ctrl = new AbortController(); // 重建实例
},
/**
* 开始对话
*/
startChatCore({
url,
body,
headers
}) {
if (!url) return;
try {
this.ctrl = new AbortController();
console.log('组件中启动ai', headers)
fetchEventSource(
url, {
method: 'POST',
openWidthHidden: true,
signal: this.ctrl.signal,
headers: {
"Content-Type": "application/json",
'Accept': 'text/event-stream',
...headers,
},
body: body,
onopen: (res) => {
console.log('open链接ai', res)
this.eventSourceInstance = res
this.$ownerInstance.callMethod('open');
},
onmessage: ({
data
}) => {
console.log('持续输出ai', data)
if (this.ctrl) {
console.log('持续输出ai2222', this.ctrl)
this.$ownerInstance.callMethod('message', data);
}
},
onerror: (err) => {
console.log('ai报错11',err)
this.$ownerInstance.callMethod('error', err);
},
}).then(() => {
this.$ownerInstance.callMethod('finish');
}).catch(err => {
console.log('ai报错',err)
this.$ownerInstance.callMethod('error', err);
})
} catch (e) {
console.log(e);
}
}
}
}
</script>
<template> <view :renderjsData="renderjsData" :change:renderjsData="chat.startChatCore" :stopCount="stopCount" change:stopCount="chat.stopChatCore" /> </template>
1 个回复
态度是心的面具
你好,有企业证书吗