使用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
相关产品推荐
相关产品推荐

