vue项目中请求完成之前点击按钮开始另一个请求 数据展示错误解决办法

本文介绍了如何使用axios的全局请求拦截器解决在标签页切换时,未完成的请求导致数据错乱的问题。通过设置全局变量储存取消请求的标识,并在每次请求时添加取消令牌,当切换标签时调用取消方法中断未完成的请求,确保数据的正确展示。

今天公司的项目出了个bug----有一个标签页通过按钮点击发送请求不同数据,前一个请求结束之前点击另一个按钮 数据展示会出现问题 本该第一个接口返回渲染的数据出现在了第二个页面

解决办法:添加全局请求拦截器 在请求拦截器中加上取消请求标识 通过cancelToken方法中断未完成的请求 代码如下——

//-----在封装的axios请求的js文件中-----

window.axiosCancel = []  // 全局定义一个存放取消请求的标识

 //在请求拦截器中加入取消请求标识
  config.cancelToken = new axios.CancelToken(cancel => {
    window.axiosCancel.push({
      cancel
    })
  })

//-----在组件内的使用----------
//在methods中定义cancel方法
cancel(){
    let cancelArr = window.axiosCancel;
    cancelArr = cancelArr || []      //判断空值
    cancelArr.forEach((ele, index) => {
        ele.cancel("取消了请求")  // 在失败函数中返回这里自定义的错误信息
        delete window.axiosCancel[index]
    })
},
//按钮点击事件
handleClick(){
    //------调用请求中断方法-----
    this.cancel()
    //数据请求接口
    getData().then(res =>{})
}

此文章旨在自己记录学习,方便日后查阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值