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 相关文章推荐
event对象的方法 兼容多浏览器
Jun 27 Javascript
jQuery.getScript加载同域JS的代码
Feb 13 Javascript
灵活使用数组制作图片切换js实现
Jul 28 Javascript
js正则表达式注册页面表单验证
Oct 11 Javascript
前端js实现文件的断点续传 后端PHP文件接收
Oct 14 Javascript
很棒的vue弹窗组件
May 24 Javascript
javascript实现非常简单的小数取整功能示例
Jun 13 Javascript
在vue中使用jointjs的方法
Mar 24 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
Vue开发中遇到的跨域问题及解决方法
Feb 11 Javascript
微信小程序弹窗禁止页面滚动的实现代码
Dec 30 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
从运行效率与开发效率比较Python和C++
2018/12/14 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
快餐公司创业计划书
2014/04/29 职场文书
住宅使用说明书
2014/05/09 职场文书
欢迎领导检查标语
2014/06/27 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
六查六看剖析材料
2014/10/06 职场文书
践行三严三实心得体会
2014/10/13 职场文书
布达拉宫的导游词
2015/02/02 职场文书
观看焦裕禄观后感
2015/06/09 职场文书