【问题标题】:Throwing an error is causing a 'UnhandledPromiseRejectionWarning'抛出错误会导致“UnhandledPromiseRejectionWarning”
【发布时间】:2021-05-13 16:34:19
【问题描述】:

我有一个异步函数:

public async postSomething(something: any): Promise<any> {
   try {
      const query: string = 'INSERT INTO table VALUES stuff';
      return await database.one(query);
   } catch (error) {
      throw new Error(`Error posting request: ${error}`);
   }
}

我认为应该可以正常工作,但是当我调用该方法时,它可以成功运行并返回 200,但我仍然收到错误“UnhandledPromiseRejectionWarning” - 源于在没有 catch 块的情况下抛出异步函数内部,或者通过拒绝未使用 .catch() 处理的承诺...

我不完全确定我在这里做错了什么,任何帮助将不胜感激。

【问题讨论】:

  • works successfully 表示方法返回database.one(query)的结果?

标签: typescript express promise


【解决方案1】:

在异步函数内部,throw 出错会导致函数返回的 Promise 被拒绝。

在您的catch 中,尽管您正确捕获了database.one Promise 如果它拒绝,但通过重新抛出错误,您会导致postSomething 返回的Promise 拒绝。

postSomething的调用者中的.catch

postSomething()
  .catch((error) => {
    res.status(500).send(error.message);
  });

或者不要重投postSomething

public async postSomething(something: any): Promise<any> {
   try {
      const query: string = 'INSERT INTO table VALUES stuff';
      return await database.one(query);
   } catch (error) {
      console.log(`Error posting request: ${error}`);
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多