错误信息: Request was aborted 堆栈信息: DOMException: Request was aborted at AiSdkToChun...

2026年06月03日 15:53 38.30 秒 success

错误信息

错误名称: AbortError 错误信息: Request was aborted 堆栈信息: DOMException: Request was aborted at AiSdkToChunkAdapter.convertAndEmitChunk (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:350328:13) at AiSdkToChunkAdapter.readFullStream (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:350125:10) at async AiSdkToChunkAdapter.processStream (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:350087:31) at async AiProvider.modernCompletions (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:353809:22) at async AiProvider.completions (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:353728:17) at async fetchChatCompletion (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:354075:2) at async transformMessagesAndFetch (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:354002:3) at async fetchAndProcessAssistantResponseImpl (file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:168450:3) at async file:///D:/cherrystudio/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Crc-ch8g.js:168542:6 错误原因: "[undefined]"

AI 解决方案

🌐 错误翻译


原文:DOMException: Request was aborted
译文:DOM异常:请求被中止

🎯 原因分析


该错误发生在 AiSdkToChunkAdapter.convertAndEmitChunk 方法中,表明一个正在进行的 HTTP请求(特别是AI模型的流式数据传输)被意外或主动地终止了。

常见触发原因:

  • 用户操作:在AI模型生成回答的过程中,用户手动点击了“停止生成”按钮。

  • 超时机制:应用程序或网络层的超时设置被触发(如请求耗时过长)。

  • 网络中断:与AI服务端的网络连接不稳定或断开。

  • 主动取消:代码逻辑中存在 AbortController,并在特定条件下调用了 abort() 方法。
  • 从堆栈看,这是在处理流式响应(readFullStream -> processStream)期间发生的,属于前端应用层的运行时异常。

    💡 解决方案


    这是一个运行时异常,无需修改代码逻辑本身。正确的处理方式是在调用AI请求的代码层级捕获并妥善处理此异常,避免应用崩溃。

    // 1. 使用 try-catch 捕获调用AI完成的函数(例如:`fetchAndProcessAssistantResponseImpl`)
    try {
        await fetchAndProcessAssistantResponseImpl(/* ...参数... */);
    } catch (error) {
        if (error.name === 'AbortError') {
            // 用户主动中止或超时,通常记录日志或向用户反馈“生成已停止”
            console.log('请求已中止,可能是用户手动停止或超时。');
            // 可在此处更新UI状态,例如将“生成中”按钮恢复为“发送”
        } else {
            // 处理其他网络或AI服务端错误
            console.error('AI请求发生错误:', error);
            // 向用户显示通用错误提示
        }
    }
    
    // 2. (如果需要主动控制中止) 确保AbortController被正确管理
    const controller = new AbortController();
    const { signal } = controller;
    
    // 将 signal 传递给实际发起请求的函数(如现代的fetch API)
    fetch(url, { signal }).then(/* ... */).catch(err => {
        if (err.name === 'AbortError') {
            // 处理中止
        }
    });
    
    // 在适当时机(如用户点击停止按钮时)调用中止
    // controller.abort();
    

    🛡️ 预防措施


  • 明确的用户反馈:确保“停止生成”按钮的逻辑清晰,仅在用户明确操作时触发 controller.abort(),并立即更新UI状态,避免用户混淆。

  • 合理的超时设置:为AI流式请求设置合理的超时时间(如 fetchsignal 结合 AbortSignal.timeout(30000)),并在超时后给出友好提示(如“请求超时,请重试”)。