当前位置: 首页 > news >正文

【axios取消请求】如何在token过期后取消未响应的请求

功能背景:

我们在实际项目中通常会遇到登录过期后会跳登录页的情况,回跳过程会根据接口请求的状态码判断是否登陆状态过期,并给出用户提示,如果此时存在多个请求接口同时调用,就会同时报出多个登录过期的提示,如何避免多个提示同时报出的情况呢?那我们就需要用到取消接口请求的功能

方法:

我们基于axios提供的AbortController对象(fetch提供的原生API)来实现这一功能

步骤:

1.创建接口请求映射表
let abortControllers = new Map()
2.在请求拦截器中存储键值对
Axios.interceptors.request.use((config) => {const controller = new AbortController()const signal = controller.signalconst requestKey = `${config.url}`// 请求地址与控制器绑定abortControllers.set(requestKey, controller)config.metadata = { signal, requestKey } // 自定义字段用于存储return config},(error) => {return Promise.reject(error.data.error.message)}
)
3.响应拦截其中判断是否过期
Axios.interceptors.response.use((res) => {if (res.status === 200) {if (res.data.code == '10008') {ElMessage.warning('登录已过期,请重新登录!')// 取消所有还未执行的接口请求abortControllers.forEach((controller) => controller.abort())abortControllers.clear() // 清空控制器映射router.push('/login')return} else {// 完成的接口在映射表中删除const requestKey = `${res.config.url}`abortControllers.delete(requestKey)return res.data}}},(error) => {// 出错的接口在映射表中删除const requestKey = `${error.config.url}`abortControllers.delete(requestKey)return Promise.reject(error.response.status)}
)

相关文章:

  • CSS学习笔记8——表格
  • kubernetes》》k8s》》Heml
  • 开源模型应用落地-语音合成-MegaTTS3-零样本克隆与多语言生成的突破
  • 从 Java 到 Kotlin:在现有项目中迁移的最佳实践!
  • SpringMVC知识体系
  • Java语言的进化:JDK的未来版本
  • Convenience Variable in GDB
  • 缓存穿透、雪崩、击穿深度解析与解决方案
  • 驱动开发硬核特训 · Day 19:从字符设备出发,掌握 Linux 驱动的实战路径(含 gpio-leds 控制示例)
  • oralce 查询未提交事务和终止提交事务
  • [特殊字符]️ 基于Pytest的自动化测试框架架构解析
  • 不要使用Round函数保留小数位了
  • 【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题
  • RocketMQ事务消息详解
  • c#-命名和书写规范
  • Java虚拟机(JVM)家族发展史及版本对比
  • C语言之阶乘2.0
  • H3C Magic路由器安全警报来啦![特殊字符][特殊字符]
  • uniapp 仿小红书轮播图效果
  • 深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南
  • 中越海警2025年第一次北部湾联合巡逻圆满结束
  • 石磊当选河北秦皇岛市市长
  • 受折纸艺术启发可移动可变形的新型超材料问世
  • 复旦大学校长金力:将配套出台多项政策推动科技成果转化
  • GDP十强省份“一季报”出炉,湖北领跑
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿