Nodejs进程崩溃,没有异常

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

当我的nodejs应用程序中发生未捕获的异常时,我会在日志中写入日志条目。

process.on('uncaughtException', function (err) {
    log.warn('Caught exception. Exiting. error: ' + err + ", stack: " + err.stack);
    process.exit(1);
});

但是,今天几次,应用程序崩溃而没有写日志条目。

在处理类似请求时,应用程序都崩溃了两次,所以它主要应该归因于应用程序的某些问题,而不是因为有人杀了它或其他一些外部因素。

那么,有没有任何方式应用程序崩溃而不给出未捕获的异常?

javascript node.js promise es6-promise
1个回答
1
投票

我建议你添加unhandledRejection。正如提到的Node.js文档,

每当Promise被拒绝时都会发出unhandledRejection事件,并且在事件循环的转弯中没有错误处理程序附加到promise。使用Promises进行编程时,异常被封装为“被拒绝的承诺”。可以使用promise.catch()捕获和处理拒绝,并通过Promise链传播。 unhandledRejection事件对于检测和跟踪被拒绝但尚未处理拒绝的承诺非常有用。

这是一个如何再次使用Node.js提供的示例:

process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at:', p, 'reason:', reason);
  // application specific logging, throwing an error, or other logic here
});

somePromise.then((res) => {
  return reportToUser(JSON.pasre(res)); // note the typo (`pasre`)
}); // no `.catch()` or `.then()`