前言

我们在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

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐