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

Repository类触发Unhandled Promise Rejection Warning问题求解

报错原因
  • 核心原因是异步Promise的异常没有被捕获:
    1. CreateMemberController的executeImpl方法调用异步方法add时未添加await关键字。async方法返回的是Promise对象,未用await等待的情况下,该Promise的reject状态不会被外层的try/catch逻辑捕获,没有处理的Promise拒绝就会抛出UnhandledPromiseRejectionWarning警告。
    2. 额外隐患:MemberRepository的add方法中调用userRepository.save()时也未添加await,save是TypeORM提供的异步数据库操作方法,未等待的情况下如果save执行报错,异常不会被当前方法的try/catch捕获,会直接向上抛出。
修复方案
  1. 给Controller中的add调用添加await,让外层try/catch可以正常捕获异步异常:
// 修正后的CreateMemberController部分代码
protected async executeImpl(
  request: express.Request,
  response: express.Response
): Promise<void | any> {
    try {
       const member = new Member();
       member.firstName = firstName;
       // 新增await关键字
       let user = await this.memberrRepo.add(member); 
    } catch (error) {
      console.error(error);
    }
  }  
  1. 给MemberRepository中的save调用添加await,确保数据库操作异常能被当前方法的try/catch捕获,同时优化错误抛出逻辑,保留原始错误信息方便排查:
// 修正后的MemberRepository部分代码
async add(model: Member): Promise<Member | null> {
  try {
    const userRepository = getRepository(Member);
    // 新增await关键字
    const savedUser = await userRepository.save(model);
    return savedUser;
  } catch (e) {
    // 替换原有返回Promise.reject的逻辑,async方法内抛错会自动包装为rejected Promise,同时保留错误信息
    throw new Error(`会员保存失败: ${e instanceof Error ? e.message : '未知错误'}`);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:39:04