NodeJS,异步异常无法捕获

问题描述 投票:0回答:1

我读了一篇内容非常丰富的博客(作者:PANU PITKÄMÄKI),内容是关于为什么异步异常在 NodeJS 中无法追踪的。它指出,在 NodeJS 中,异步异常是无法追踪的,因为

catch
块根本不存在于事件循环的堆栈中。例如:

 try {
     setImmediate(() => {
        throw new Error();
     });
 } catch (e) {
     // catch error.. doesn't work
 }

我还在《NodeJS设计模式》一书中阅读了以下内容:

抛出异步回调将导致异常跳转到事件循环,并且永远不会传播到下一个回调。在 NodeJS 中,这是一种不可恢复的状态,并会导致应用程序关闭。

问题:

从书中我得到的印象是事件循环有一个单独的堆栈,因此有一个单独的线程,这是真的吗?

javascript node.js exception event-loop
1个回答
0
投票

这是很符合逻辑的,你确实无法捕获异步调用中抛出的异常。捕获它的最简单方法可能是使用

await
调用,但它可能会破坏异步机制的目的。要查看一些替代方案,请参阅这个旧的 Stackoverflow 答案

© www.soinside.com 2019 - 2024. All rights reserved.