360 - 《从一例 async await 常见错误说起》

发布于 2023年10月26日

注:本文 GPT-4 含量 80%。

逛 X 时 https://twitter.com/BenLesh/status/1717272722193965511 看到一个例子。await async 虽好,直到他不会抛错…

async function willReject() {
  throw new Error("Up yours, developers! - JavaScript");
}

async function test() {
  try {
    return willReject();
  } catch (reason) {
    console.log("LOLOLOL NEVER HIT");
  }
}

test();

这段代码存在一个常见的异步错误处理问题。try-catch块不能捕获willReject函数抛出的异步错误,因为try-catch仅适用于同步操作。在这种情况下,错误会导致程序崩溃或未处理的Promise拒绝,而不会触发catch块。

几个解法:

1、使用await关键字:在调用willReject()时使用await关键字,以便等待该函数执行完成。这样,任何抛出的错误都会被catch块捕获。

async function test() {
  try {
    await willReject();
  } catch (reason) {
    console.log("Caught the error");
  }
}

2、使用.catch():另一种解决方案是在返回的Promis

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。