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

2026年04月03日 15:49 processing

错误信息

错误名称: AbortError 错误信息: Request was aborted 堆栈信息: DOMException: Request was aborted at AiSdkToChunkAdapter.convertAndEmitChunk (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:322985:13) at AiSdkToChunkAdapter.readFullStream (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:322782:10) at async AiSdkToChunkAdapter.processStream (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:322745:32) at async ModernAiProvider.modernCompletions (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:325482:22) at async ModernAiProvider._completionsOrImageGeneration (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:325399:10) at async ModernAiProvider.completions (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:325382:17) at async fetchChatCompletion (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:325697:2) at async transformMessagesAndFetch (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:325633:3) at async fetchAndProcessAssistantResponseImpl (file:///Applications/Cherry%20Studio.app/Contents/Resources/app.asar/out/renderer/assets/store-CA-rHPlI.js:118866:3) 错误原因: "[undefined]"

AI 解决方案

报错分析报告

1.错误翻译


原文:Request was aborted
译文:请求被中止

2.原因分析


  • 根本原因:HTTP请求在执行过程中被主动或被动中止(如超时、用户取消、网络中断)。

  • 具体位置AiSdkToChunkAdapter.convertAndEmitChunk 方法中处理流数据时触发DOMException,上下文为Cherry Studio的AI响应流转换过程(modernCompletionsprocessStream)。
  • 3. 解决方案


    // 修复思路:捕获AbortError并添加容错/重试逻辑
    async function safeProcessStream() {
      const controller = new AbortController();
      const timeout = setTimeout(() => controller.abort(), 15000); // 15秒超时保护
    
      try {
        await AiSdkToChunkAdapter.processStream(controller.signal); // 传入中止信号
      } catch (error) {
        if (error.name === 'AbortError') {
          console.warn('⚠️ 请求被中止,尝试重试...');
          // 可选:重试逻辑(需限制次数)
          // return retryProcessStream(); 
        } else {
          throw error; // 抛出其他错误
        }
      } finally {
        clearTimeout(timeout); // 清理超时
      }
    }
    

    4. 预防措施


  • 错误处理:在所有异步请求/流处理中添加AbortError捕获,区分中止与其他错误。

  • 生命周期管理:使用AbortController显式控制请求超时/取消,避免被动中止。
    • 推荐工具:浏览器DevTools「Network」面板(查看请求状态)、axios/fetch的超时配置项。