事件:'uncaughtException'
版本 | 变化 |
---|---|
v12.0.0、v10.17.0 | 添加了 |
v0.1.18 | 添加于:v0.1.18 |
参数
err
<Error> 未捕获的异常。origin
<string> 指示异常是源自未处理的拒绝还是源自同步错误。可以是'uncaughtException'
或'unhandledRejection'
。后者用于在基于Promise
的异步上下文中发生异常(或者如果Promise
被拒绝)并且--unhandled-rejections
strict
或throw
(这是默认值)并且拒绝未处理,或者在命令行入口点的 ES 模块静态加载阶段发生拒绝时。
'uncaughtException'
事件在未捕获的 JavaScript 异常一直冒泡返回事件循环时发出。默认情况下,Node.js 通过将堆栈跟踪打印到 stderr
并使用代码 1 退出来处理此类异常,覆盖任何先前设置的
。为 process.exitCode
'uncaughtException'
事件添加处理程序会覆盖此默认行为。或者,更改'uncaughtException'
处理程序中的
,这将导致进程以提供的退出代码退出。否则,在存在此类处理程序的情况下,该进程将以 0 退出。process.exitCode
import process from 'node:process'; process.on('uncaughtException', (err, origin) => { fs.writeSync( process.stderr.fd, `Caught exception: ${err}\n` + `Exception origin: ${origin}` ); }); setTimeout(() => { console.log('This will still run.'); }, 500); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); console.log('This will not run.');
const process = require('node:process'); process.on('uncaughtException', (err, origin) => { fs.writeSync( process.stderr.fd, `Caught exception: ${err}\n` + `Exception origin: ${origin}` ); }); setTimeout(() => { console.log('This will still run.'); }, 500); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); console.log('This will not run.');
可以通过安装 'uncaughtExceptionMonitor'
侦听器来监视 'uncaughtException'
事件,而无需覆盖默认行为以退出进程。
警告:使用'uncaughtException'
正确地#
'uncaughtException'
是一种粗略的异常处理机制,仅用作最后的手段。该事件不应用作 On Error Resume Next
的等效项。未处理的异常本质上意味着应用程序处于未定义状态。尝试在未从异常中正确恢复的情况下恢复应用程序代码可能会导致其他不可预见和不可预知的问题。
从事件处理程序中抛出的异常将不会被捕获。相反,该进程将以非零退出代码退出,并且将打印堆栈跟踪。这是为了避免无限递归。
在未捕获的异常后尝试正常恢复可能类似于在升级计算机时拔掉电源线。十次有九次,什么都没有发生。但是第十次,系统被破坏了。
的正确使用'uncaughtException'
是在关闭进程之前对分配的资源(例如文件说明符、句柄等)执行同步清理。在 'uncaughtException'
之后恢复正常操作是不安全的。
为了以更可靠的方式重新启动崩溃的应用程序,无论是否发出'uncaughtException'
,都应在单独的进程中使用外部监视器来检测应用程序故障并根据需要恢复或重新启动。
相关用法
- Node.js proces 'uncaughtExceptionMonitor'事件用法及代码示例
- Node.js stream.Writable 'unpipe'事件用法及代码示例
- Node.js proces 'unhandledRejection'事件用法及代码示例
- Node.js http.ClientRequest 'upgrade'事件用法及代码示例
- Node.js tls.Server 'keylog'事件用法及代码示例
- Node.js http.Server 'clientError'事件用法及代码示例
- Node.js cluste 'disconnect'事件用法及代码示例
- Node.js proces 'exit'事件用法及代码示例
- Node.js stream.Writable 'pipe'事件用法及代码示例
- Node.js stream.Readable 'end'事件用法及代码示例
- Node.js cluste 'fork'事件用法及代码示例
- Node.js Http2Session 'remoteSettings'事件用法及代码示例
- Node.js Worker 'listening'事件用法及代码示例
- Node.js tls.Server 'resumeSession'事件用法及代码示例
- Node.js InterfaceConstructor 'pause'事件用法及代码示例
- Node.js fs.FSWatcher 'change'事件用法及代码示例
- Node.js stream.Readable 'data'事件用法及代码示例
- Node.js http.ClientRequest 'connect'事件用法及代码示例
- Node.js Http2Session 'localSettings'事件用法及代码示例
- Node.js REPLServer 'exit'事件用法及代码示例
- Node.js cluste 'online'事件用法及代码示例
- Node.js tls.TLSSocket 'session'事件用法及代码示例
- Node.js Worker 'exit'事件用法及代码示例
- Node.js cluste 'exit'事件用法及代码示例
- Node.js Http2Stream 'trailers'事件用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 'uncaughtException'事件。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。