推荐答案
process.on('uncaughtException', ...)
uncaughtException
事件用于捕获未捕获的异常。当 Node.js 进程中出现未捕获的异常时,会触发此事件。通过监听此事件,可以在进程崩溃之前执行一些清理操作或记录错误日志。
process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); // 执行一些清理操作 process.exit(1); // 退出进程 });
process.on('unhandledRejection', ...)
unhandledRejection
事件用于捕获未处理的 Promise 拒绝。当 Promise 被拒绝但没有相应的 .catch()
处理时,会触发此事件。通过监听此事件,可以捕获并处理这些未处理的拒绝,避免进程崩溃。
process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); // 执行一些处理操作 });
本题详细解读
uncaughtException
uncaughtException
事件是 Node.js 提供的一个全局异常捕获机制。当代码中抛出异常但没有被 try...catch
捕获时,Node.js 会触发此事件。通常情况下,未捕获的异常会导致进程崩溃,但通过监听 uncaughtException
事件,可以在进程退出前执行一些必要的清理操作,如关闭数据库连接、记录错误日志等。
需要注意的是,uncaughtException
事件并不能保证进程不会崩溃,它只是提供了一个处理未捕获异常的机会。因此,建议在捕获异常后,手动调用 process.exit(1)
来终止进程,以避免进程处于不稳定状态。
unhandledRejection
unhandledRejection
事件用于捕获未处理的 Promise 拒绝。在异步编程中,Promise 是常用的处理异步操作的方式。当 Promise 被拒绝但没有相应的 .catch()
处理时,Node.js 会触发 unhandledRejection
事件。
通过监听此事件,可以捕获并处理这些未处理的拒绝,避免进程崩溃。与 uncaughtException
类似,unhandledRejection
事件也提供了一个处理未处理拒绝的机会,但同样不能保证进程不会崩溃。因此,建议在捕获拒绝后,执行相应的处理操作,如记录日志或重新抛出错误。
使用场景
- uncaughtException:适用于捕获全局未捕获的异常,通常用于记录错误日志或执行清理操作。
- unhandledRejection:适用于捕获未处理的 Promise 拒绝,通常用于记录日志或重新抛出错误。
注意事项
- 尽量避免在
uncaughtException
和unhandledRejection
事件处理程序中执行复杂的逻辑,因为这可能会导致进程进入不稳定状态。 - 在生产环境中,建议结合日志系统使用这些事件,以便更好地监控和调试应用程序。