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

NodeJS中await搭配forEach使用时异步指令未正确等待返回结果为空问题

问题原因

Array.prototype.forEach 本身不支持等待异步回调执行完成,你传入的async回调会返回Promise实例,但forEach不会收集这些Promise,也不会等待它们状态变更,遍历触发完所有回调就会直接结束,且forEach的返回值为undefined。你写的await stores.forEach(...)本质上是await了一个非Promise的undefined值,会直接跳过等待,执行后续的return orders逻辑,此时所有getOrders的异步请求还未返回结果,自然得到空数组。

修复方案

你可以根据业务需要选择以下两种方案:

  • 并行请求(性能更高,推荐无并发限制时使用):用Promise.all配合map批量等待所有异步请求完成
// map会将每个store映射为getOrders返回的Promise实例
orders = await Promise.all(stores.map(store => getOrders(store, token, tokenType)))
return orders

Promise.all会等待所有传入的Promise都resolve之后,将所有返回结果按原顺序组装为数组返回,不需要手动push到orders数组中。

  • 串行请求(适合需要控制并发、按顺序请求的场景):用for of循环替代forEach
for (const store of stores) {
  const arr = await getOrders(store, token, tokenType)
  orders.push(arr)
}
return orders

for of循环原生支持在async函数内通过await逐个等待异步操作执行完成,所有请求都执行完毕后才会走到return逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:36:08