在TypeScript中使用Autorest时如何取消正在进行的客户端请求
TypeScript 中 Autorest 客户端请求取消实现方案
官方推荐方案:通过请求可选参数传递 AbortSignal
Autorest 生成的 TypeScript 客户端的所有接口请求方法,默认支持在最后一个可选配置参数中传入 abortSignal 实现请求取消,无需手动操作 RequestPrepareOptions,实现步骤如下:
- 安装依赖(如果项目没有预装):
npm install @azure/abort-controller @azure/core-http - 初始化
AbortController实例,将实例的signal属性传入请求的可选配置项中 - 需要取消请求时,调用控制器的
abort()方法即可
代码示例:
import { AbortController } from "@azure/abort-controller"; // 替换为你自己项目中 Autorest 生成的客户端 import { YourServiceClient } from "./generated/yourServiceClient"; const client = new YourServiceClient(/* 客户端基础配置,比如服务地址、认证参数等 */); const abortController = new AbortController(); // 发起请求 async function callApi() { try { const res = await client.yourApiMethod( // 接口的必填参数依次放在前面 "param1", 123, // 最后一个参数为请求可选配置 { abortSignal: abortController.signal } ); console.log("请求成功", res); } catch (err) { if (err.name === "AbortError") { console.log("请求已被手动中止"); return; } // 其他业务错误处理 console.error("请求错误", err); } } callApi(); // 需要中止请求时调用 // abortController.abort();
兼容旧版本方案:自定义请求管道注入取消信号
如果你使用的 Autorest 版本较老,生成的客户端方法没有暴露 abortSignal 配置项,可以通过自定义请求策略的方式,把取消信号注入到外发请求中,实现全局或单客户端维度的请求控制:
import { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from "@azure/core-http"; import { AbortSignal } from "@azure/abort-controller"; // 定义中止请求的策略工厂 const abortPolicyFactory = (abortSignal: AbortSignal): RequestPolicyFactory => { return { create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => { return new class extends BaseRequestPolicy { sendRequest(httpRequest) { // 给所有外发请求绑定取消信号 httpRequest.abortSignal = abortSignal; return nextPolicy.sendRequest(httpRequest); } }(nextPolicy, options); } }; }; // 初始化客户端时注入策略 const abortController = new AbortController(); const client = new YourServiceClient(/* 基础配置 */, { clientOptions: { additionalPolicies: [ { policy: abortPolicyFactory(abortController.signal), position: "perCall" } ] } });
注意:如果需要对多个请求做单独的取消控制,建议优先使用第一种方法,为每个请求传入独立的
abortSignal;第二种方法注入的策略会作用于当前客户端实例发起的所有请求,适合批量取消的场景。
内容的提问来源于stack exchange,提问作者rysama
相关产品推荐
相关产品推荐

