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

vue2路由切换时取消上个页面的异步请求

背景:我们经常会遇到当前页面未加载完毕时跳转路由或者返回操作, 但是通过network会发现, 若网络环境较差的情况下, 会一直pending, 切换路由后在network中添加新的请求但是正在pending的请求依然存在. 当我们在项目中做了一个上拉加载分页的时候会一直加载中, 用户等待不耐烦后可能会主动触发返回操作, 但是此刻即使用户触发返回操作, 加载分页的请求还是存在, 页面还是会一直提示加载中, 直到该请求加载成功或超时才肯罢休。最终给用户造成一些不必要的结果,同时也对web性能造成一定的影响。

那么如何解决这个问题呢,方法就是监听路由,在路由切换前将上个页面的请求取消。

第一步:

axios请求头设置
   

import axios from 'axios'
import { store } from './store'    // 引入vuexaxios.interceptors.request.use(config => {config.cancelToken = new axios.CancelToken(function (cancel) {store.commit('pushToken', {cancelToken: cancel})})return config}
)

第二步:

利用vuex,新建一个store.js,将取消方法cancel放到数组中,然后在路由守卫中把数组中存有的cancel方法都执行

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export const store = new Vuex.Store({state: {cancelTokenArr: [] // 取消请求token数组},mutations: {pushToken (state, payload) {state.cancelTokenArr.push(payload.cancelToken)},clearToken ({ cancelTokenArr }) {cancelTokenArr.forEach(item => {item('路由跳转取消请求')})cancelTokenArr = []}}
})

第三步:

监听路由

router.beforeEach(function (to, from, next) {store.commit('clearToken') // 取消请求next()
})

到此就可以解决路由跳转后上个页面的请求还在pending的状态啦

相关文章:

  • 快手AI布局:从直播电商到大模型,如何打造智能生态?
  • UniWebView的更新日志【### 5.3.0 (28 Jan, 2023)】
  • 【鸿蒙应用ArkTS开发系列】- 云开发入门实战二 实现省市地区三级联动地址选择器组件(上)
  • 学习笔记:如何分析财务报表
  • 责任链模式 (Chain of Responsibility Pattern)
  • uniapp页面使用多个echarts出现数据渲染错乱问题解决
  • java中如何用stream流的方式给实体类赋值代码实例?
  • 基于C#实现Prim算法
  • Linux 安装显卡驱动
  • Python基础语法之学习字符串快速格式化
  • 【Web-Note】 JavaScript概述
  • 关于JSON
  • MybtisPlus快速开发(从controller到mapper)
  • 第二十章总结。。。
  • centos 安装谷歌浏览器
  • Date型的使用
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Swoft 源码剖析 - 代码自动更新机制
  • uva 10370 Above Average
  • vue-router的history模式发布配置
  • 区块链将重新定义世界
  • 收藏好这篇,别再只说“数据劫持”了
  • 追踪解析 FutureTask 源码
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​水经微图Web1.5.0版即将上线
  • (+4)2.2UML建模图
  • (1)(1.13) SiK无线电高级配置(六)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (二)pulsar安装在独立的docker中,python测试
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (原創) 未来三学期想要修的课 (日記)
  • (转)setTimeout 和 setInterval 的区别
  • (转载)hibernate缓存
  • **CI中自动类加载的用法总结
  • . Flume面试题
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 反射 Reflect
  • .NET 回调、接口回调、 委托
  • .net6Api后台+uniapp导出Excel
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • @取消转义
  • [20150629]简单的加密连接.txt
  • [AIGC codze] Kafka 的 rebalance 机制
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [C#][DevPress]事件委托的使用
  • [C#基础]说说lock到底锁谁?
  • [C]整形提升(转载)
  • [C++] Windows中字符串函数的种类