@google/genai SDK中ai.files.upload忽略abortSignal未抛出异常问题咨询
AbortController无法终止@google/genai的文件上传请求
从你的代码和描述来看,这绝对不是预期行为——按照Web标准中AbortController的设计,当你调用abort()后,绑定了该信号的异步操作应该立刻抛出AbortError并终止执行,而不是继续完成上传流程。
问题根源分析
SDK未正确处理AbortSignal
你的代码写法完全符合规范:创建AbortController、将signal传入ai.files.upload的配置中、调用abort()后信号的aborted状态也变为true,但上传流程没有被中断。这说明@google/genaiSDK的files.upload方法可能并没有实际监听这个信号的abort事件,也没有把信号绑定到内部的网络请求(比如底层的fetch或XMLHttpRequest)上。信号状态更新但未触发中断逻辑
虽然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
相关产品推荐
相关产品推荐

