axios解决高并发的方法:axios.all()与axios.spread()的操作


Posted in Javascript onNovember 09, 2020

前言:

很多时候,我们可能需要同时调用多个后台接口,就会高并发的问题,一般解决这个问题方法:

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()的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript引用对象的方法代码
Aug 13 Javascript
js Array对象的扩展函数代码
Apr 24 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
简化版手机端照片预览组件
Apr 13 Javascript
Jquery动态添加输入框的方法
May 29 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
Sep 22 Javascript
JavaScript 函数节流详解及方法总结
Feb 09 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
JavaScript反射与依赖注入实例详解
May 29 Javascript
vue组件tabbar使用方法详解
Nov 06 Javascript
详解如何创建并发布一个 vue 组件
Nov 08 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
Dec 24 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 #Javascript
详解Vue中的watch和computed
Nov 09 #Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
Nov 09 #Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 #Javascript
Echarts在Taro微信小程序开发中的踩坑记录
Nov 09 #Javascript
Vue路由权限控制解析
Nov 09 #Javascript
在vue项目中promise解决回调地狱和并发请求的问题
Nov 09 #Javascript
You might like
PHP中MD5函数使用实例代码
2008/06/07 PHP
javascript基本语法分析说明
2008/06/15 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
使用python求解二次规划的问题
2020/02/29 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
大学学生会辞职信
2015/05/13 职场文书
小孩不笨观后感
2015/06/03 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS