Javascript NodeJS,异步异常是不可调度的
我读了一篇信息丰富的文章,内容是关于为什么异步异常在NodeJS中是不可追踪的。它指出,在NodeJS中,反同步异常是不可跟踪的,因为Javascript NodeJS,异步异常是不可调度的,javascript,node.js,exception,event-loop,Javascript,Node.js,Exception,Event Loop,我读了一篇信息丰富的文章,内容是关于为什么异步异常在NodeJS中是不可追踪的。它指出,在NodeJS中,反同步异常是不可跟踪的,因为catch块根本不存在于事件循环的堆栈中。例如: try { setImmediate(() => { throw new Error(); }); } catch (e) { // catch error.. doesn't work } 我还在《NodeJS设计模式》一书中读到了以下内容: 在异步回调
catch
块根本不存在于事件循环的堆栈中。例如:
try {
setImmediate(() => {
throw new Error();
});
} catch (e) {
// catch error.. doesn't work
}
我还在《NodeJS设计模式》一书中读到了以下内容:
在异步回调中引发将导致异常跳转到事件循环,并且永远不会传播到下一个回调。在NodeJS中,这是一种不可恢复的状态,并导致应用程序关闭
问题:
从书中我得到的印象是,事件循环有一个单独的堆栈,因此有一个单独的线程,这是真的吗?节点中有一个单独的线程。您描述的不是特定于节点,而是一般的JS。当
try{…}时,错误不会发生
如果这个解释对您来说更直观的话,将对块进行评估。错误发生在事件循环中,对吗?错误不会发生在事件循环中,而只是传播到事件循环中,因为setImmediate是位于事件循环中的异步函数。正如前面提到的,异常会传播到事件循环中。FWIW,这样的异常可以是handled with.@WillemvanderVeen所有JS代码都在事件循环中运行,因此每个错误都发生在事件循环中。