防止Node.js 8+退出未捕获的异常

时间:2018-10-17 13:56:57

标签: javascript node.js

免责声明:我知道在未定义状态下不退出应用程序的做法有多么糟糕。我打算将其仅用于测试,因为我想知道是否完全可能。

我认为通过处理process uncaughtException事件,可以防止Node.js 8+关闭,但是以下脚本在第一个throw之后完成

process.on('uncaughtException', err => {
  console.log(err, 'Uncaught Exception thrown');
  // process.exit(1);
});

console.log("before throwing the first time")
throw 42;
console.log("before throwing once again")
throw 42;
console.log("after throwing a 2nd time")

如何预防?

1 个答案:

答案 0 :(得分:5)

您的异常处理程序在做正确的事情。节点退出的原因是因为您没有其他事件要处理。如果您还有其他事件,则该过程将继续运行:

process.on('uncaughtException', err => {
  console.log(err, 'Uncaught Exception thrown');
  // process.exit(1);
});

setTimeout(function() { console.log('still running') }, 1000)
console.log("before throwing the first time")
throw 42;
console.log("before throwing once again")
throw 42;
console.log("after throwing a 2nd time")