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