實際工作中,經常有遇到一個頁面初始需要多個請求的情況,也嘗試過async去做,不過效果感覺不是很滿意,之前也知道axios中有個all()的方法可以做多個請求,但是沒有仔細去了解,今天看到一篇文章有寫到這方面的知識,剛好自己也學習一下。
用axios.all()、axios.spread()這兩個函數來處理多個請求,該方法是axios的靜態方法,不是axios實例方法
首先,在mina.js中引入axios,然后將其掛載在vue原型上,全局使用
//引入axios模塊(先下載“axios”) import axios from 'axios' //將axios掛載在vue原型鏈上 Vue.prototype.$axios=axios;
在組件中使用axios配合axios.all()、axios.spread()同時發送多個請求
//在methods中定義請求方法,並return出去,不要寫請求回調then() methods:{ getAllTask:function(){ console.log('調用第一個接口') return this.$axios({ url:'http://192.168.*.**:***/api/getTask/getAllData', method:'GET', params:{ offset:1, pageSize:10 } }) }, getAllCity:function(){ console.log('調用第二個接口') return this.$axios({ url:'http://192.168.*.**:***/city/getCities', method:'GET', }) } }, //在mounted周期同時發送兩個請求,並在請求都結束后,輸出結果 mounted:function(){ var me = this; this.$axios.all([me.getAllTask(),me.getAllCity()]) .then(me.$axios.spread(function(allTask, allCity){ console.log('所有請求完成') console.log('請求1結果',allTask) console.log('請求2結果',allCity) })) }
兩個請求執行完成后,才執行axios.spread()中的函數,且axios.spread()回調函數的返回值中的請求結果的順序和請求的順序一致