2021-05-12 14:32:11
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。
相關文章