隔壁申叔叔
隔壁申叔叔
  • 发布:2025-04-30 15:08
  • 更新:2025-05-01 13:16
  • 阅读:2204

开发ios的项目,使用@microsoft/fetch-event-source插件,为啥无法手动停止啊

分类:uni-app

这个就是全部代码,通过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>
2025-04-30 15:08 负责人:无 分享
已邀请:
态度是心的面具

态度是心的面具

你好,有企业证书吗

要回复问题请先登录注册