axios.all()解決並發請求的問題


實際工作中,經常有遇到一個頁面初始需要多個請求的情況,也嘗試過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()回調函數的返回值中的請求結果的順序和請求的順序一致


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM