axios全局重复请求取消具体实现代码

 更新时间:2026年06月17日 09:49:02   作者:用户25577885081  
Axios提供了几种取消重复请求的方法,包括使用CancelToken、利用Axios拦截器以及通过设置请求标识并对比标识来手动取消,这篇文章主要介绍了axios全局重复请求取消具体实现的相关资料,需要的朋友可以参考下

目的

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

实现思路

具体实现

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

// 为新请求创建 controller 用于取消请求
const controller = new AbortController();
//标记请求可以被取消 config为请求的配置 注意这个属性必须是controller 
config.signal= controller .signal
//cancelToken.abort() 取消标记的请求
cache.set(key, controller.abort)
取消请求会进入响应拦截器的错误函数 也就是第二个函数
error.code === "ERR_CANCELED"//判断这个错误是否是取消请求导致的

总结 

到此这篇关于axios全局重复请求取消具体实现代码的文章就介绍到这了,更多相关axios全局重复请求取消内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript中getSelection获取选中内容实现示例(vue项目)

    JavaScript中getSelection获取选中内容实现示例(vue项目)

    在JavaScript中获取选中内容通常是指获取用户在网页上选中的文本或者其他可选择的元素,这篇文章主要介绍了JavaScript中getSelection获取选中内容实现的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-08-08
  • 5分钟快速搭建vue3+ts+vite+pinia项目

    5分钟快速搭建vue3+ts+vite+pinia项目

    本文主要介绍了5分钟快速搭建vue3+ts+vite+pinia项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • layer弹出层自适应高度,垂直水平居中的实现

    layer弹出层自适应高度,垂直水平居中的实现

    今天小编就为大家分享一篇layer弹出层自适应高度,垂直水平居中的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • javascript定时变换图片实例代码

    javascript定时变换图片实例代码

    javascript定时变换图片实例代码,需要的朋友可以参考一下
    2013-03-03
  • JS把数据添加到列表中的几种常见方法

    JS把数据添加到列表中的几种常见方法

    在JavaScript中,向列表数组添加数据是一项基础且高频的操作,无论是动态生成内容、处理用户输入还是与后端API交互,掌握数组操作方法都是前端开发者的必备技能,本文将详细介绍几种常用的添加数据到数组的方法,需要的朋友可以参考下
    2026-03-03
  • JS SetInterval 代码实现页面轮询

    JS SetInterval 代码实现页面轮询

    setInterval 是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。下面通过本文给大家分享JS SetInterval 代码实现页面轮询,感兴趣的朋友一起看看吧
    2017-08-08
  • 微信小程序对图片进行canvas压缩的方法示例详解

    微信小程序对图片进行canvas压缩的方法示例详解

    这篇文章主要给大家介绍了关于微信小程序对图片进行canvas压缩的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • c#程序员对TypeScript的认识过程

    c#程序员对TypeScript的认识过程

    本文向大家详细展示了从C#程序员的视角学习TypeScript的过程,主要是针对这两种语言的异同进行了简单的对比学习,希望对大家能够有所帮助。
    2015-06-06
  • TreeView 用法(有代码)(asp.net)

    TreeView 用法(有代码)(asp.net)

    TreeView 用法,后台结合asp.net需要的朋友可以参考下。
    2011-07-07
  • JS中promise化微信小程序api

    JS中promise化微信小程序api

    这篇文章主要给大家通过代码实例分析了promise化微信小程序api的使用方法,对此有需要的朋友可以参考学习下。
    2018-04-04

最新评论