You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@google/genai SDK中ai.files.upload忽略abortSignal未抛出异常问题咨询

AbortController无法终止@google/genai的文件上传请求

从你的代码和描述来看,这绝对不是预期行为——按照Web标准中AbortController的设计,当你调用abort()后,绑定了该信号的异步操作应该立刻抛出AbortError并终止执行,而不是继续完成上传流程。

问题根源分析

  1. SDK未正确处理AbortSignal
    你的代码写法完全符合规范:创建AbortController、将signal传入ai.files.upload的配置中、调用abort()后信号的aborted状态也变为true,但上传流程没有被中断。这说明@google/genai SDK的files.upload方法可能并没有实际监听这个信号的abort事件,也没有把信号绑定到内部的网络请求(比如底层的fetch或XMLHttpRequest)上。

  2. 信号状态更新但未触发中断逻辑
    虽然abortController.signal.aborted显示为true,但SDK内部并没有在信号触发中断时抛出AbortError,导致你的try/catch块无法捕获到异常,上传流程继续执行直至完成。

验证与确认

你可以快速验证原生API的行为是否正常,对比SDK的表现:

async function testNativeAbort() {
  const controller = new AbortController();
  // 100ms后触发中断
  setTimeout(() => controller.abort(), 100);
  try {
    // 发起一个慢请求
    await fetch('https://httpbin.org/delay/1', { signal: controller.signal });
    console.log("请求未被中断");
  } catch (e) {
    if (e.name === "AbortError") {
      console.log("请求被成功中断"); // 这里应该会正常输出
    }
  }
}

如果原生fetch能正常触发AbortError,那就能坐实是@google/genai SDK的问题。

解决方案建议

这明显是SDK的bug,你可以:

  • 前往@google/genai的官方代码仓库提交Issue,附上你的最小复现代码,说明问题现象;
  • 暂时可以考虑自己封装一层上传逻辑,用原生fetch调用Google GenAI的文件上传API,手动绑定AbortSignal,这样能确保中断机制正常工作。

内容的提问来源于stack exchange,提问作者Curio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 10:23:21