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语句中的CDATA标签的意义
May 09 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
Jan 24 Javascript
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
Array数组对象中的forEach、map、filter及reduce详析
Aug 02 Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 Javascript
Vue之Mixins(混入)的使用方法
Sep 24 Javascript
Node.js API详解之 Error模块用法实例分析
May 14 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函数scandir排除特定目录
2014/06/12 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
js读写json文件实例代码
2014/10/21 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
Python异常处理操作实例详解
2018/05/10 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
在Python中使用Neo4j的方法
2019/03/14 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
python中return如何写
2020/06/18 Python
pandas实现导出数据的四种方式
2020/12/13 Python
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
产品包装策划方案
2014/05/18 职场文书
数据保密承诺书
2014/06/03 职场文书
另类冲刺标语
2014/06/24 职场文书
甘南现象心得体会
2014/09/11 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书