Node.js进程无一崩溃

时间:2018-12-01 13:43:44

标签: javascript node.js promise es6-promise

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

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

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

两次处理类似请求时,应用程序都崩溃了,因此这主要应该是由于应用程序出现问题,而不是因为有人杀死了它或其他外部因素。

那么,在没有给出未捕获异常的情况下,应用程序是否有可能崩溃?

1 个答案:

答案 0 :(得分:1)

我建议您也添加unhandledRejection。正如Node.js文档中提到的

  

只要Promise被拒绝并且在事件循环之内没有错误处理程序附加到Promise,就会发出unhandledRejection事件。使用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()`