这个就是全部代码,通过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> 
             
             
             
			 
                                        
                                     
            
2 个回复
态度是心的面具 - 欢迎询问ios相关问题
你好,有企业证书吗
3***@qq.com
解决了么