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) {
    // Both requests are now complete
  }));

上面是官网的并发案例,但如果我想将一个含有N个请求链接的数组 [],该如何使用 axios 的并发呢?

let urls = [url1, url2, ...]

返回的结果最好也能是一个同样顺序的数组。

阅读 15.3k
3 个回答

其实这个就是 Promise.all 的包装形式,直接用 Promise.all 来实现就可以了,完全能够满足你的需求。

按你的描述,需要先把请求链接的数组转变成对应的 axios 请求的数组,也就是将一个数组中的每个元素转化在成另一种形式,用什么办法呢?当然是要用数组的 map 方法。可以尝试下面的做法:

let urls = ['/user/12345', '/user/12345/permissions'];
let requests = urls.map(makeRequest);

// 把指定的 url 转变成 axios 请求,返回的是 Promise 对象
function makeRequest(url) {
    return axios.get(url);
}
axios.all(requests)
    .then(axios.spread(function (acct, perms) {
        // Both requests are now complete
    }));
axios.spread((res1, res2) => {
   // 你的逻辑
   // res1 res2 分别为你请求的返回值  
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进