取消当前正在进行的所有接口请求

需求: 当请求接口过多,功能点切换的时候需要停止之前的请求接口。

实现:

  • axios.ts 实例化拦截器,自动给每个请求注入 controller.signal,并存入 manager
  • 在响应或错误阶段移除 controller

代码实现:

typescript 复制代码
export class RequestManager {
  private controllers = new Set<AbortController>();
  add(c: AbortController) { this.controllers.add(c); }
  delete(c: AbortController) { this.controllers.delete(c); }
  cancelAll(reason = 'Canceled by RequestManager') {
    for (const c of this.controllers) c.abort(reason as any);
    this.controllers.clear();
  }
}
export const requestManager = new RequestManager();
arduino 复制代码
api.interceptors.request.use((config) => {
  // 如果外部已传入 signal,就复用;否则创建新的
  if (!config.signal) {
    const controller = new AbortController();
    config.signal = controller.signal;
    // 把 controller 挂到 config 以便响应阶段访问
    (config as any).__controller = controller;
    requestManager.add(controller);
  } else {
    // 若用户自带 signal,也可选择登记但无法拿到 controller
  }
  return config;
});
typescript 复制代码
api.interceptors.response.use(
  (res) => {
    const controller = (res.config as any).__controller as AbortController | undefined;
    if (controller) requestManager.delete(controller);
    return res;
  },
  (error) => {
    const cfg = error.config || {};
    const controller = (cfg as any).__controller as AbortController | undefined;
    if (controller) requestManager.delete(controller);
    return Promise.reject(error);
  }
);
ini 复制代码
requestManager.cancelAll());
相关推荐
薛定猫AI4 小时前
【深度解析】Gemma Chat 本地 AI 编程 Agent:Electron + MLX + 开源模型的离线 Vibe Coding 实战
javascript·人工智能·electron
kyriewen4 小时前
Webpack vs Vite:一个是“老黄牛”,一个是“猎豹”,你选谁?
前端·webpack·vite
打小就很皮...4 小时前
html2canvas + jsPDF 生成 PDF 的踩坑与解决方案总结
前端·pdf
全栈前端老曹5 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
笑虾5 小时前
Win10 修改注册表 让鼠标悬停PNG上时 tip 始终显示分辨率
开发语言·javascript·ecmascript
雾岛听风6915 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
遇见~未来5 小时前
第三篇_现代布局_从弹性到网格
前端·css3
前端那点事5 小时前
Vue前端SEO优化全攻略(实操落地版,新手也能上手)
前端·vue.js
Dxy12393102165 小时前
HTML 如何使用 SVG 画曲线
前端·算法·html
用户2367829801685 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript