axios并发操作

2020-12-01 17:25:39

参考地址 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.datathis.loadingDateRank.loading = r2.data.loadingthis.loadingDateRank.unloading = r2.data.unloadingthis.loadingAreasRank.loadingRegionalList = r3.data.inflowthis.loadingAreasRank.unloadingRegionalList = r3.data.outflowthis.enterpriseLoadWeight.enterpriseLoadingRankList = r4.data.loadingRankthis.enterpriseLoadWeight.enterpriseUnloadingRankList = r4.data.unloadingRank}))

除了axios.all,我们也可以使用Promise.all,示例如下 

Promise.all([p1, p2]).then(function(values) {console.log(values);//values为一个数组///进行你的下一步操作});


  • 2019-10-29 11:30:12

    Vue路由的$router.back(-1)回退时如何判断有没有上一个路由

    这个函数是这样的,判断当前页面的历史记录是不是小于等于1,如果小于等于1,说明这个页面没有可以返回的上一页,如果没有可以返回的上一页,就给地址栏加上一个goindex=true的参数,这样你从这个页面在往下一个页面跳转在返回,这个参数就一直加上的

  • 2019-10-30 00:33:15

    Mac 查看本机ip地址

    记住看好下面,查询mac的本机地址是ifconfig而不是ipconfig,windows才是ipconfig,虽然不知道if是啥意思。

  • 2019-10-30 13:25:17

    mybatis foreach标签详解,逗号,and还有or,留一个

    查询数据库中文章的相关文章 文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割 查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这个集合作为条件来查询