You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待多次Axios请求全部完成?

如何等待多次Axios请求全部完成?

这个问题我之前做批量接口请求时也碰到过!你现在的写法里每个请求都是独立异步执行的,确实没法直接感知到所有请求什么时候全部结束,用Promise.all就能轻松解决这个问题,具体可以这么改:

方法一:用Promise.all等待所有请求成功完成

这种方式适合要求所有请求都必须成功的场景——只要有一个请求失败,就会直接进入错误捕获逻辑:

// 先创建一个数组,用来存放所有请求的Promise对象
const requestPromises = [];
for (let i = 0; i < 10; i++) {
  const url = `http://www.myapi.com/api/?id=${i}`;
  // 把每个axios请求的Promise加入数组
  requestPromises.push(axios.get(url));
}

// 用Promise.all等待所有请求完成
Promise.all(requestPromises)
  .then(responses => {
    // responses是按请求顺序排列的响应数组
    const temp = responses.map(res => res.data);
    // 现在所有请求都完成了,放心做你想做的操作!
    console.log("所有请求处理完成:", temp);
  })
  .catch(error => {
    console.log("有请求出错了:", error);
  });

方法二:用Promise.allSettled允许部分请求失败

如果你的场景可以接受部分请求失败,不想因为某一个请求挂了就中断后续处理,那就用Promise.allSettled——它会等所有请求不管成功失败都结束后,返回每个请求的结果详情:

const requestPromises = [];
for (let i = 0; i < 10; i++) {
  const url = `http://www.myapi.com/api/?id=${i}`;
  requestPromises.push(axios.get(url));
}

Promise.allSettled(requestPromises)
  .then(results => {
    const temp = [];
    results.forEach((result, index) => {
      if (result.status === 'fulfilled') {
        // 请求成功,提取数据
        temp[index] = result.value.data;
      } else {
        // 请求失败,可做错误记录或设置默认值
        console.log(`第${index+1}个请求失败:`, result.reason);
        temp[index] = null;
      }
    });
    // 现在所有请求都处理完毕,不管成功失败
    console.log("全部请求处理结束:", temp);
  });

另外提一句:你原来的写法里用temp[i] = res['data'],虽然用let i的循环不会有索引混乱的问题,但异步请求的响应顺序不一定和发起顺序一致(比如第3个请求可能比第2个先返回),而用Promise.all的话,返回的结果顺序是严格和请求顺序对应的,会更稳妥。

备注:内容来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:53:01