Vue切换页面时中断axios请求

Posted 驻北静望

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue切换页面时中断axios请求相关的知识,希望对你有一定的参考价值。

在Vue单页面开发过程中,遇到这样的情况,当我切换页面时,由于上一页面请求执行时间长,切换到该页面时,还未执行完,这时那个请求仍会继续执行直到请求结束,此时将会影响页面性能,并且可能对现在页面的数据显示造成一定影响

所以我们应该,切换页面前中断前面所有请求

 

Vue.prototype.$http= axios;//Vue函数添加一个原型属性$axios 指向axios,这样vue实例或组件中不用再去重复引用Axios 直接用this.$axios就能执行axios 方法了
const CancelToken = axios.CancelToken;
Vue.$httpRequestList=[];

Vue.prototype.$ajax = (type, url, data) => {
    return new Promise((resolve, reject) => {   //封装ajax
        var aa = {
            method: type,
            url: url,
            cancelToken: new CancelToken(c => {  //强行中断请求要用到的
                Vue.$httpRequestList.push(c);
            })
        }
        var json = (type == ‘get‘) ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data });
        var ajax = Vue.prototype.$http(json).then(res => {
            resolve(res);
        }).catch(error => {   //中断请求和请求出错的处理
                if (error.message == "interrupt") {
                    console.log(‘已中断请求‘);
                    return;
                } else {
                    reject(error);
                }
            })
        return ajax;
    })
};


router.beforeEach((to, from, next) => {   //路由切换检测是否强行中断,
    if(Vue.$httpRequestList.length>0){        //强行中断时才向下执行
        Vue.$httpRequestList.forEach(item=>{
            item(‘interrupt‘);//给个标志,中断请求
        })  
    }
    next();    
});

 

以上是关于Vue切换页面时中断axios请求的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

vue中axios请求成功了如何把数据渲染到页面上?

接口测试

Vue路由切换&Axios接口取消重复请求

由于 unsafe-eval,Vue.js 3 扩展在使用“vue-cli-service build”时中断