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

如何批量等待Axios Promise请求执行完成,无需硬编码调用

问题根源

Array.prototype.forEach本身没有异步等待的逻辑,你传入的async回调返回的Promise会被forEach直接忽略,不会等待执行完成,所以代码会在所有请求返回前就执行console.log(array),此时数组还没被推入数据。你硬编码的写法每一步都手动await了请求,所以会等所有请求执行完成后才执行打印,能拿到完整数据。

解决方案

方案1:串行请求(和硬编码逻辑完全一致,推荐898次请求的场景使用,不会触发服务端限流)

用支持await的for...of循环替代forEach即可,不需要用到yield语法:

async function main() {
  for (const item of someArrayWithALotOfObjects) {
    await A(item.url);
  }
  // 所有请求已执行完成,可在此处执行文件写入逻辑
  console.log(array);
  // 示例写文件逻辑:await fs.promises.writeFile('./output.json', JSON.stringify(array))
}

方案2:并行请求(请求速度更快,适合服务端允许高并发的场景)

用Array.prototype.map生成所有请求的Promise数组,再通过Promise.all等待所有请求完成,同样不需要用到yield语法:

async function main() {
  // 生成所有请求的Promise实例
  const allRequests = someArrayWithALotOfObjects.map(item => A(item.url));
  // 等待全部请求执行完成
  await Promise.all(allRequests);
  // 所有请求已执行完成,可在此处执行文件写入逻辑
  console.log(array);
}

注意事项

  • 898次请求如果用并行方案,可能触发服务端的请求频率限制,建议优先用串行方案,稳定性更高。
  • 后续替换为fs写文件操作时,建议使用fs.promises下的异步API,和现有async/await写法适配性更好,避免回调嵌套。

内容的提问来源于stack exchange,提问作者adarian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:39:05