首頁 > 軟體

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

2020-11-09 12:16:57

前言:

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

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',
       method:'方式',//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, r2, r3, 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()的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com