zoukankan      html  css  js  c++  java
  • axios解决并发请求

    最近才复习axios的时候,看到axios.all和axios.spread,感到既熟悉又陌生.因为很多时候,我们可能需要同时调用多个后台接口,就会高并发的问题,所以在这里让我好好复习一下.

    axios.all和axios.spread

    axios.all()axios.spread()两个辅助函数用于处理同时发送多个请求,可以实现在多个请求都完成后再执行一些逻辑。注意:该方法是axios的静态方法,不是axios实例的方法!

    //将axios挂载在vue原型链上
    Vue.prototype.$axios = axios;
    在其他组件使用axios配合axios.all()、axios.spread()同时发送多个请求
    Home.vue
    
    //在methods中定义请求方法,并return出去,不要写请求回调then()
    methods:{
        getAllTask:function(){
         console.log('调用第一个接口')
         return this.$axios({
           url:'http://192.168.*.**:***/api/getTask/getAllData',
           method:'GET',  // 参数get所以用params。post / put用data
           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) // allTask的返回值
          console.log('请求2结果',allCity) // allCity的返回值
        }))
      }
    查看控制台输出情况

     

    两个请求执行完成后,才执行axios.spread()中的函数,且axios.spread()回调函数的的返回值中的请求结果的顺序和请求的顺序一致.

    但是很多时候,我们在项目中并不会直接去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为一个数组
        ///进行你的下一步操作
      });
    转载自: https://segmentfault.com/a/1190000019882188 有轻微改动
  • 相关阅读:
    Linux运维常见故障排查和处理的技巧汇总
    React 页面开发服务规范抽象
    解决 NVM 安装 Node 版本出现 TLS 问题
    解决部署 React 框架 Next.js 到 IIS 上刷新页面出现 404 问题
    正则表达式
    rsa加解密代码实现
    zookeeper介绍(5)快速入门教程
    yii2-adminlte-asset中MenuHelper 菜单伸缩问题
    yii2-admin autocomplete 输出弹出框位置不对
    php curl模拟常用的请求
  • 原文地址:https://www.cnblogs.com/cz976230/p/14256281.html
Copyright © 2011-2022 走看看