前言

我们在Vue项目开发当中经常会遇到一个组件渲染需要的基础数据可能需要向后台发送很多请求,此时,我们一一发送显然是不合理的,一般情况下我们都是使用axios.all()方法进行并发请求处理

标准格式

这里是在VsCode上敲出axios.all(我装了插件)自动生成的格式,可以看出axios.all接收一个数组参数,并且其是基于promise的
我们一般处理并发请求,肯定不是拿到实际返回的数据,一定会对返回数据进行处理,所以axios.spread的作用就是对返回数据进行处理。

axios.all([callback1,callback2])
    .then(axios.spread((res1, res2)=>{
 }))

还有一种格式就是

axios.all([]).then(
	result => {}
)

案例

这是菜鸟教程上给的例子

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) {
    // 两个请求现在都执行完成
  }));

下面这个是我自己开发时候写到的一个例子

async getMenuList() {
      let sendArr = [
      // 这里是因为我在main.js上将axios挂载到了$http
        this.$http.get('menus'),
        this.$http.get('users', {
          params: this.queryInfo
        })
      ]
      this.$http.all(sendArr).then((result) => {
        const { data: res1 } = result[0]
        const { data: res2 } = result[1]
        console.log(res2)
        if (res1.meta.status !== 200) {
          return this.$message.error(res1.meta.msg)
        }
        this.menuList = res1.data
        if (res2.meta.status !== 200) {
          return this.$message.error(res2.meta.msg)
        }
        this.userList = res2.data
      })
      // const { data: res } = await this.$http.get('menus')
      // if (res.meta.status !== 200) {
      //   return this.$message.error(res.meta.msg)
      // }
      // this.menuList = res.data
    }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐