为什么try catch能捕捉await后promise错误? 和执行栈有关系吗?

3 min read

try-catch 能捕捉 await 后的 promise 错误是因为 await 关键字会将 promise 的执行结果转化为同步执行。

当你在一个函数中使用 await 时,JS 引擎会暂停函数的执行,等待 promise 被 resolve 或 rejected。如果 promise 被 resolved,函数会继续执行,并将 promise 的结果赋值给 await 语句。如果 promise 被 rejected,函数会抛出一个异常,可以在 try-catch 语句块中捕获。

这就是为什么使用 await 语句能在 promise 抛出错误时使用 try-catch 捕获到错误的原因。因为使用 await 将 promise 的执行结果转化为了同步执行,所以错误能够在 try-catch 中捕获。

而在没有使用 await 的情况下,promise 的错误是异步发生的,并不能在 try-catch 中捕获到。

所以可以说, try-catch 与执行栈有关系, 因为使用 await 可以将promise的错误从异步变成同步, 让try-catch能捕获错误.