博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue项目中路由切换时取消所有等待中的请求
阅读量:6207 次
发布时间:2019-06-21

本文共 1184 字,大约阅读时间需要 3 分钟。

场景

使用vue构建的app页面,切换路由时,存在卡顿现象。经分析,较大原因是,上个页面中的axios请求未结束,特别是某个存在多个请求的页面,会在该页面停留较长时间(所有请求结束)才会切换到目标页面。

思路

路由切换时取消所有未完成的axios请求。

实现

参照,可以使用cancel token来取消请求。

首先,为达到统一处理,在main.js中添加请求拦截器:

let axiosPromiseArr=[] //储存cancel tokenaxios.interceptors.request.use(function (config) {    // 在发送请求设置cancel token    config.cancelToken = new axios.CancelToken(cancel => {        axiosPromiseArr.push({cancel})    })    return config;}, function (error) {    // 对请求错误的处理    return Promise.reject(error);});复制代码

其次,路由切换时,取消axiosPromiseArr中所有未完成的请求,也是main.js:

router.beforeEach((to, from, next) => {    axiosPromiseArr.forEach((ele, index) => {        ele.cancel()        delete axiosPromiseArr[index]    })}复制代码

最后,添加响应拦截器(具体位置根据项目中,拦截器位置而定):

axios.interceptors.response.use(response => {    //请求成功时的处理}, error => {    //请求取消时,也会进入error,根据axios.isCancel():true--请求取消  false--请求失败    //仅在请求失败时做后续处理    if(axios.isCancel(error)) {        console.log('请求取消')    }else {        Toast({            message: '连接服务器失败,请稍后再试!',            duration: 2000,            className: 'globalMsg'        });        return Promise.reject(error);    }});复制代码

ps:第一次写文章,不足之处,请指正。顺便立个flag:2018年9月26日15:12:42,记录人生第一次[羞涩]

转载地址:http://krhca.baihongyu.com/

你可能感兴趣的文章
用户配置相关文件
查看>>
Django开发中常用的命令总结
查看>>
thinkphp实现分页
查看>>
自动化运维之saltstack(二)states深入理解
查看>>
变量拼接的四种方法
查看>>
expect 批量修改服务器用户密码
查看>>
linux下配置SS5(SOCK5)代理服务
查看>>
Nginx平滑升级到最新版本
查看>>
Python自动化运维:Django之View视图和Template
查看>>
hive配置
查看>>
Oracle Controlfile控制文件中记录的信息片段sections
查看>>
菜鸟也学hadoop(1)_搭建单节点的hadoop
查看>>
spanning-tree extend system-id
查看>>
思维导图分析http之http协议版本
查看>>
linux延时与定时操作
查看>>
JavaScript语法详解(三)
查看>>
老王学linux-ftp
查看>>
“换标”Intel的穷则思变
查看>>
一个APP的由来
查看>>
DNS 原理
查看>>