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

forEach中使用async函数执行push操作报错无法正常工作如何解决

问题原因

你遇到的报错核心是调用push方法的主体this.test是undefined,和你要push的对象无关,这也是为什么你打印要存入的对象是正常的,但执行push操作报错。
导致问题的两个常见原因如下:

  • 你只声明了test的类型为ProtectionAndOperationModes[],但没有初始化赋值为空数组,TypeScript仅做编译时类型校验,运行时未初始化的数组默认值就是undefined
  • 其次你使用forEach包裹异步回调的写法存在隐患:forEach不会等待异步回调执行完成,你无法感知所有数据请求何时全部结束,后续如果要立刻访问test数组会出现数据不全的问题,同时异步回调也存在this指向丢失的风险。
解决方案
  1. 首先初始化test数组,在你声明类属性的位置直接赋值空数组:
export class 你的类名 {
  // 声明类型同时初始化空数组
  test: ProtectionAndOperationModes[] = [];
  // 其他属性和方法...
}
  1. 替换forEach异步遍历的写法,改用Promise.all批量处理异步请求,既可以保证所有请求完成后再操作数组,也能避免this指向问题:
let snapProtections = JSON.parse(snapshot.protection);
this.completeMachine.operationModes = snapOperationModes;
// 收集所有异步请求Promise
const reqList = snapProtections.map(prot => {
  return this.protectionDataAcessService.getProtectionAndOperationModesByProtectionId(prot.id)
})
// 等待所有请求完成,一次性存入数组
this.test.push(...await Promise.all(reqList))

注意:上述使用await的代码需要放在async修饰的函数内部才能正常运行。

内容的提问来源于stack exchange,提问作者Sini.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:09:01