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 相关文章推荐
弹出广告特效代码(一个IP只弹出一次)
May 11 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
Oct 20 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
老生常谈 关于JavaScript的类的继承
Jun 24 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
Oct 09 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 Javascript
js html5 css俄罗斯方块游戏再现
Oct 17 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 jQuery
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
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 图片文件上传实现代码
2010/12/29 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php实现的操作excel类详解
2016/01/15 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
django中间键重定向实例方法
2019/11/10 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
银行会计职员个人的自我评价
2013/09/29 职场文书
美德好少年事迹材料
2014/01/19 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
同事打架检讨书
2015/05/06 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
Python基础详解之邮件处理
2021/04/28 Python
python实现自定义日志的具体方法
2021/05/28 Python
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
Go语言并发编程 sync.Once
2021/10/16 Golang
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript