1. 程式人生 > 程式設計 >axios解決高併發的方法:axios.all()與axios.spread()的操作

axios解決高併發的方法:axios.all()與axios.spread()的操作

前言:

很多時候,我們可能需要同時呼叫多個後臺介面,就會高併發的問題,一般解決這個問題方法:

axios.all和axios.spread

***注意這裡的$get是封裝的axios方法
//方法一:
searchTopic() {
 return this.$axios({
       url:'地址1',method:'方式',//get/post/patch/put/deleted
       params:{//引數get所以用params。post.put用data
       }
      })
}
 //方法二:
searchs(){
     return this.$axios({
       url:'地址1',//get/post/patch/put/deleted
       params:{//引數get所以用params。post.put用data
       }
      })
     },axios.all([searchTopic(),searchs()])
 .then(axios.spread(function (allSearchTopic,allSearchs) {
  debugger//列印可以拿到所有的返回值
  allSearchTopic == 方法一的返回值
  allSearchs == 方法二的返回值
 }));

補充知識:axios.all及Promise.all合併多個請求且都返回資料後進行其他操作

很多時候,我們需要同時向後端進行多個請求,當所有請求都返回資料後,再進行一些操作。

比如:初始化頁面時,可能需要初始化一些基礎資料,才能進行操作。

獲取這些基礎資料,可能需要向後端傳送request1,request2。。。

等多個請求,而後續的操作說需要request1,request2等都正確返回資料後才能進行。

在axios官方文件中對一次性併發多個請求示例如下:

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){
  //當這兩個請求都完成的時候會觸發這個函式,兩個引數分別代表返回的結果
 }))

但是很多時候,我們在專案中並不會直接去axios.get,axios請求可能都放在一個檔案中,並且對加了攔截器等等。示例如下:

export const cargoDayNumber = (data) => {
 return axios.request({
  url: '/api/zz-xt/statistical/areas',method: 'post',data: data
 })
}

在vue檔案中的使用如下:

let r1 = carVisitTime({ createTime: '2019-06-27' })
   let r2 = statistic({ createTime: '2019-06-27' })
   let r3 = cargoDayNumber({ createTime: '2019-07-01' })
   let r4 = enterpriseRanking()
   axios.all([r1,r2,r3,r4]).then(
    axios.spread((r1,r4) => {
     
     this.numberVehicleVisits = r1.data      
     this.loadingDateRank.loading = r2.data.loading
     this.loadingDateRank.unloading = r2.data.unloading 
     
     this.loadingAreasRank.loadingRegionalList = r3.data.inflow
     this.loadingAreasRank.unloadingRegionalList = r3.data.outflow 
   
     this.enterpriseLoadWeight.enterpriseLoadingRankList = r4.data.loadingRank
     this.enterpriseLoadWeight.enterpriseUnloadingRankList = r4.data.unloadingRank
    })
   )

除了axios.all,我們也可以使用Promise.all,示例如下

 Promise.all([p1,p2]).then(function(values) {
    console.log(values);//values為一個數組
    ///進行你的下一步操作
   });

以上這篇axios解決高併發的方法:axios.all()與axios.spread()的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。