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

vue项目路由跳转后上一页面未完成的接口取消请求

vue项目路由跳转后上一页面未完成的接口取消

一、 需求

在路由跳转后,如果上一个页面未完成的接口请求,需要取消掉。
比如: 页面A请求接口A,页面B请求接口B。从页面A跳转到页面B,如果接口A未完成,需要取消掉(尤其是点击过快的情况下,还会出现本地缓存的参数被新页面参数替换的情况)。

二、 实现思路

两种方法可以实现:
1. 使用 cancelToken 取消请求
2. 使用内置的 AbortController 取消请求

两种方法思路基本一致,只是代码编辑方面有点不同;在axios的请求拦截器中收集所有发送的接口,存储在vuex的一个数组中,然后在router.beforeEach中(或点击事件中)监听到路由跳转,就把该数组中的所有未完成的请求取消。

三、 代码实现

1. 在store中创建添加请求到数组中,和把数组中请求清空的方法

const state = {clearPmsArr: [], // 取消请求方法数组
};const mutations = {pushPmsStack(state, payload) {state.clearPmsArr.push(payload.clearPms);},clearPmsStack({ clearPmsArr }) {clearPmsArr.forEach((item) => {// 使用 cancelToken 取消请求// item("路由跳转取消之前页面请求请求");// 使用内置的 AbortController 取消请求item.abort("路由跳转取消之前页面请求请求")});clearPmsArr = [];},
};export default {namespaced: true,state,mutations,
};

2. 在axios的请求拦截器中收集发送的请求,调用store的方法;存入对应需要取消的请求方法;在响应拦截器拦截下来 不抛出错误

// 公司将 Axios 进行了一次封装 自己在请求和响应拦截中写上就好
class HttpService extends HttpLib {// 请求拦截器requestBefore(config) {config = {...config,}// 使用 cancelToken 取消请求// store.commit("pmsStack/pushPmsStack", { clearPms: super.cancel });// 使用内置的 AbortController 取消请求const controller = new AbortController();config.signal = controller.signal;// 存入取消请求的 函数;用于切换页面时取消请求store.commit("pmsStck/pushPmsStack", { clearPms: controller });// ...代码省略return super.requestBefore(config)}// 在响应拦截器拦截下来 不抛出错误responseFailed(error) {if(error.name && error.name === "CanceledError"){// 取消请求的情况下,终端Promise调用链return new Promise(() => {});}return new Promise((resolve, reject) => {super.responseFailed(error).catch((e) => {...})})}
}

3. 在路由跳转前(或方法中)取消请求

store.commit("pmsStack/clearPmsStack")

相关文章:

  • 视频汇聚管理平台EasyCVR程序报错“create jwtSecret del server class:0xf98b6040”的原因排查与解决
  • springboot基本使用十一(自定义全局异常处理器)
  • 【遂愿赠书 - 1期】:安恒“网安三剑客”-大模型时代下的网络安全实战指南
  • 学生信息管理系统C++
  • 插入排序与希尔排序
  • 生成式 AI——ChatGPT、Dall-E、Midjourney 等算法理念探讨
  • 前端开发三大主流框架解析
  • css :hover的使用
  • Python知识点5---字符串的使用
  • 知了汇智携手数字经济商会,共促物联网鸿蒙产教融合新篇章
  • 统信UOS SSH服务升级(ubuntu20)内网
  • 宏集JMobile Studio—实现HMI界面高自由度设计
  • EasyExcel之动态表头导出不生效
  • 2024年06月在线IDE流行度最新排名
  • 数字化校园建设让学习更加广阔
  • [nginx文档翻译系列] 控制nginx
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Bytom交易说明(账户管理模式)
  • FineReport中如何实现自动滚屏效果
  • github从入门到放弃(1)
  • leetcode98. Validate Binary Search Tree
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • rabbitmq延迟消息示例
  • spring security oauth2 password授权模式
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 深度学习入门:10门免费线上课程推荐
  • 思否第一天
  • 正则与JS中的正则
  • 追踪解析 FutureTask 源码
  • 字符串匹配基础上
  • MPAndroidChart 教程:Y轴 YAxis
  • 阿里云API、SDK和CLI应用实践方案
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #AngularJS#$sce.trustAsResourceUrl
  • #include到底该写在哪
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)Hilt的基本概念和使用
  • (13)Hive调优——动态分区导致的小文件问题
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (二)WCF的Binding模型
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (接口自动化)Python3操作MySQL数据库
  • (每日一问)基础知识:堆与栈的区别
  • (正则)提取页面里的img标签
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)shell调试方法
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .bat批处理(二):%0 %1——给批处理脚本传递参数