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

如何在异步函数中返回数字或抛出错误?TSLint报错求修复

问题分析与修复方案

嘿,我来帮你搞定这个问题!你的代码里有两个核心问题,其中一个直接触发了TSLint的"Expression Expected"错误,另一个是async/await用法的冗余,我一步步给你拆解:

1. 直接报错的根源:return throw是语法错误

你在catch块里写了return throw new ErrorFactory.DatabaseError(ex);——这里的问题是:throw是一个语句,不是表达式,而return后面必须跟一个合法的表达式(比如数值、Promise对象等)。把throw放在return后面是不符合JavaScript语法的,这就是TSLint报错的原因。

而且你的需求是"失败时抛出异常",完全不需要在catch块里用return,直接抛出错误就行——async函数内部抛出的异常会自动被包装成rejected状态的Promise,正好符合你的需求。

2. 冗余的写法:混合async/await和.then()

你的函数已经声明为async了,但内部却用.then()来处理Promise,这完全没发挥出async/await简化异步逻辑的优势,反而让代码结构更绕。我们可以把它重构为纯async/await的写法,让逻辑更清晰。

修复后的代码

private async insertAppOrg(orgId): Promise<number> {
  try {
    // 用await直接获取查询结果,替代.then()
    const appOrgData = await this.dbInstance.AppOrg.find({ where: { orgId } });
    if (appOrgData) {
      return appOrgData.appOrgId;
    } else {
      // 直接await创建操作的结果
      return await this.createAppOrg(orgId);
    }
  } catch (ex) {
    // 直接抛出异常,无需return
    throw new ErrorFactory.DatabaseError(ex);
  }
}

修复说明

  • 移除了catch块里的return,直接抛出错误,解决了语法错误,同时满足"失败时抛出异常"的需求。
  • 用await替代.then(),把嵌套的逻辑改成了线性结构,代码更易读、易维护。
  • 简化了对象字面量的写法:{ orgId: orgId }可以简写为{ orgId }(ES6+的语法糖)。

这样修改后,函数就能正常工作了:成功时返回对应的数字ID,失败时抛出DatabaseError异常,调用方可以通过try/catch或者.catch()来处理这个异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:02:40