我读了一篇很有启发性的blog (by PANU PITKÄMÄKI)帖子,内容说明了为什么NodeJS中无法处理异步异常。它指出,在NodeJS中,异步异常是无法解决的,因为catch
块根本不存在于事件循环的堆栈中。例如:
try {
setImmediate(() => {
throw new Error();
});
} catch (e) {
// catch error.. doesn't work
}
我还在《 NodeJS设计模式》一书中阅读了以下内容:
在异步回调中抛出异常将导致异常跳入事件循环,并且永远不会传播到下一个回调。在NodeJS中,这是不可恢复的状态,并导致应用程序关闭。
从书中我得到的印象是,事件循环具有单独的堆栈,因此具有单独的线程,这是真的吗?