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

使用Promise.all的子Promise未等待axios.get完成就进入父循环

问题分析与修复

你的fetchProductByUrl函数存在两个关键问题,导致父Promise无法等待所有请求完成:

1. 未返回异步操作的结果

函数内部虽然用await Promise.all处理了请求,但没有将异步操作的结果返回出去。async函数默认会返回一个resolved状态的Promise,值为undefined,所以父级的await fetchProductByUrl(...)会直接拿到undefined,进而继续执行后续代码,而实际的请求还在后台运行。

2. 冗余的.then(res => return res)

Promise.all本身就会在所有请求完成后返回结果数组,这个then回调完全是多余的,不会改变任何结果。


修复后的代码

async function fetchProductByUrl(url_array, cfmModelName) {
  try {
    // 直接await Promise.all并返回结果,去掉多余的then
    return await Promise.all(url_array.map(url => {
      return axios.get(url);
    }));
  } catch (error) {
    console.log(error);
    // 建议抛出错误让父级捕获处理,避免父级误将error当成成功结果
    throw error;
  }
}

额外说明

  • 如果需要提取每个请求的响应数据(比如res.data),可以在map回调里处理:
    return axios.get(url).then(res => res.data);
    
  • 父级代码无需修改,保持await fetchProductByUrl(...)即可,现在它会等待所有请求完成后再进入下一次循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:27:05