抛出错误会导致“UnhandledPromiseRejectionWarning”

时间:2021-02-10 00:30:42

标签: typescript express promise

我有一个异步函数:

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() 处理的承诺...

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

1 个答案:

答案 0 :(得分:0)

在异步函数中,throw错误会导致函数返回的 Promise 被拒绝。

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

.catch 的调用方中的任意一个 postSomething

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}`);
   }
}