axios全局重复请求取消

目的

避免重复请求,提高运行效率,在全局统一处理减少代码量

实现思路

具体实现

js 复制代码
import axios from "axios";
import { getKey } from "./getkey";
export const request = axios.create({
  baseURL: import.meta.env["KING_BASE_URL"],
});

const cacheMap = new Map();
// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    config.headers.icode = "hellosunday";
    const key = getKey(config);
    const controller = new AbortController();
    config.signal = controller.signal;
    console.log(cacheMap.has(key));
    if (cacheMap.has(key)) {
      console.log(cacheMap.get(key));
      cacheMap.get(key)();
    }
    cacheMap.set(key, controller.abort);
    console.log(cacheMap);

    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    const key = getKey(response.config);
    if (cacheMap.has(key)) {
      cacheMap.delete(key);
    }
    console.log("响应成功");
    return response;
  },
  function (error) {
    const key = error.config ? getKey(error.config) : null;
    if (key) {
      cacheMap.delete(key); // 无论成功或失败,请求结束后都应清理
    }
    if (error.code === "ERR_CANCELED") {
      return Promise.reject({ statusText: "请求正在进行中" });
    }
    return Promise.reject(error);
  },
);

取消请求的API

js 复制代码
// 为新请求创建 controller 用于取消请求
const controller = new AbortController();
//标记请求可以被取消 config为请求的配置 注意这个属性必须是controller 
config.signal= controller .signal
//cancelToken.abort() 取消标记的请求
cache.set(key, controller.abort)
取消请求会进入响应拦截器的错误函数 也就是第二个函数
error.code === "ERR_CANCELED"//判断这个错误是否是取消请求导致的
相关推荐
重庆穿山甲6 小时前
我们不做「看起来很聪明」的知识库:一套企业级 RAG 平台的 37 屏真机实录
前端
风花一世月6 小时前
🛩️ 我把一段夕阳飞行做成了能按键驾驶的网页(24 秒四段航线,在线直接玩)
前端
用户11481867894846 小时前
实现一个「配置驱动」的动态表格组件(Vue + Element UI)
前端
数据掘金6 小时前
小程序分享参数在页面栈中的传递
前端
乐享qicheng6 小时前
1,自定义表单通俗理解-PC设计APP渲染
前端
为你学会写情书6 小时前
大屏适配别再只会 transform: scale 了,这套方案更稳
前端
孤独的神6 小时前
《AI 成了我的工位搭子,也成了我的焦虑来源》
前端
行者全栈架构师6 小时前
给开源 Rust 工具加一个新检查项,TRAE 帮我从想法跑到构建产物:全链路实战
前端·算法·架构
hunterandroid6 小时前
[鸿蒙从零到一] relationalStore 高级实践:事务、迁移与敏感数据保护
前端
lcarusZZZ6 小时前
前端转型,自建新闻转播客工作流
前端