vue使用axios请求等待所有请求完成loading消失的4个方法

Posted 骑着代马去流浪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue使用axios请求等待所有请求完成loading消失的4个方法相关的知识,希望对你有一定的参考价值。

方法1,以事件总线方式创建拦截器,待所有事件请求结束消失loading

创建事件总线:

import Vue from 'vue'
var _bus = new Vue()  // 创建一个事件总线
var num = 0
axios.interceptors.request.use(function (config)   //在请求发出之前进行一些操作
    num++
    _bus.$emit('showloading')
    return config
  

axios.interceptors.response.use(response =>         // 接受请求后num--,判断请求所有请求是否完成
    num--
    if (num <= 0) 
      _bus.$emit('closeLoading')      
     else 
      _bus.$emit('showloading')      
    
  )
export var bus = _bus   //暴露事件总线

总线调用:

improt bus form xxx.js
created()
 var _this = this
 bus.$on('showloading',function()
    _this.showloading = true    // loading出现
 )
 bus.$on('closeLoading',function()
    _this.showloading = false   // loading消失
 )

方法2,直接在封装的axios.js中拦截,原理跟方法1一样

let requestingCount = 0;

const handleRequestLoading = () => 
  if (!requestingCount)  startLoading()
  requestingCount++

const handleResponseLoading = () => 
  requestingCount--
  if (!requestingCount)  stopLoading()


axiosInstance.interceptors.request.use(config => 
    handleRequestLoading()
  ,() => 
    handleResponseLoading()
  )

axiosInstance.interceptors.response.use(response => 
    handleResponseLoading()
  , error => 
    handleResponseLoading()
  )

方法3,使用Promise.all方法调用封装的axios请求

具体如何使用参考https://blog.csdn.net/weixin_36185028/article/details/102394378

let p1 = new Promise((resolve, reject) => 
    resolve(1);
)
let p2 = new Promise((resolve, reject) => 
    resolve(2);
)
let p3 = new Promise((resolve, reject) => 
    resolve(3);
)
Promise.all([p1, p2, p3]).then(values =>  
    console.log(values); 
);

方法4,axios.all方法

官方例子:

function getUserAccount() 
return axios.get('/user/12345');


function getUserPermissions() 
return axios.get('/user/12345/permissions');


axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) 

// Both requests are now complete
));

 

参考来源:https://segmentfault.com/q/1010000012271633/

以上是关于vue使用axios请求等待所有请求完成loading消失的4个方法的主要内容,如果未能解决你的问题,请参考以下文章

在Vue项目中,等待所有请求完毕以后执行操作

Mock.js + vue.js + axios 结合开发

Mock.js + vue.js + axios 结合开发

Vue 使用axios发送请求

vue2项目使用axios发送请求

vue2项目使用axios发送请求