Skip to content

try...catch 可以捕获到异步代码中的错误吗?

Posted on:2024年8月10日 at 17:07

不能。

以下面代码为例:

try {
  setTimeout(() => {
    throw new Error("err");
  }, 200);
} catch (err) {
  console.log(err);
}

setTimeout是一个异步函数,它的回调函数会在指定的延时后被放入事件队列,等待当前执行栈清空后才执行。因此,当setTimeout的回调函数执行并抛出错误时,try…catch已经执行完毕,无法捕捉到异步回调中的错误。

对于异步代码,需要结合 Promise 、async/await 或者事件监听器等机制来处理错误。

原文转自:https://fe.ecool.fun/topic/d17cf190-40d8-4405-bc82-eb54480ca38c