使用CustomVision SDK遇TypeError: Expected signal to be an instanceof AbortSignal求助
解决CustomVision SDK的
TypeError: Expected signal to be an instanceof AbortSignal报错 问题背景
使用以下依赖版本创建CustomVision项目时,始终触发TypeError: Expected signal to be an instanceof AbortSignal错误:
{ "@azure/cognitiveservices-customvision-prediction": "^5.1.2", "@azure/cognitiveservices-customvision-training": "^5.2.0", "@azure/ms-rest-azure-js": "^2.1.0" }
引入的库:
import { TrainingAPIClient } from "@azure/cognitiveservices-customvision-training"; import { PredictionAPIClient } from "@azure/cognitiveservices-customvision-prediction"; import { ApiKeyCredentials } from "@azure/ms-rest-js";
已尝试切换@azure/ms-rest-azure-js版本、传入AbortSignal均无效,且当前版本不支持core-auth等现代库。
可行解决思路
1. 锁定@azure/ms-rest-js的兼容版本
当前报错源于依赖的@azure/ms-rest-js版本与CustomVision SDK不匹配,尝试将@azure/ms-rest-js锁定为^2.0.0版本(与@azure/ms-rest-azure-js@2.1.0兼容):
npm install @azure/ms-rest-js@^2.0.0 --save-exact
重新初始化客户端时,不主动传入AbortSignal相关参数(旧版本SDK无需显式处理信号)。
2. 禁用自动AbortSignal注入
若项目存在自动注入AbortSignal的全局逻辑(如请求拦截器),暂时禁用该逻辑,或针对CustomVision SDK的请求单独跳过信号注入:
// 初始化客户端时不传入signal参数 const trainingCredentials = new ApiKeyCredentials({ inHeader: { "Training-key": "你的训练密钥" } }); const trainer = new TrainingAPIClient(trainingCredentials, "你的服务端点"); // 调用方法时不传递signal选项 await trainer.createProject("自定义视觉项目");
3. 降级CustomVision SDK到稳定兼容版本
尝试将CustomVision SDK降级到与@azure/ms-rest-azure-js@2.1.0完全兼容的版本,示例依赖配置:
{ "@azure/cognitiveservices-customvision-prediction": "^5.0.0", "@azure/cognitiveservices-customvision-training": "^5.1.0" }
重新安装依赖后测试客户端功能是否恢复正常。
4. 手动适配AbortSignal类型
若必须保留当前版本,可手动创建兼容的AbortSignal实例(注意旧版本SDK的信号类型要求):
// Node.js环境从node:abort-controller导入 const { AbortController } = require('node:abort-controller'); const controller = new AbortController(); // 调用方法时传入匹配类型的signal await trainer.createProject("我的项目", { signal: controller.signal });
注意:该方法仅适用于Node.js环境,浏览器环境需使用原生AbortController。
内容的提问来源于stack exchange,提问作者Senad Redzic
相关产品推荐
相关产品推荐

