错误事件

EventEmitter 实例中发生错误时,典型的行为就是触发一个 'error' 事件。这些在 Node.js 中被视为特殊情况。

如果 EventEmitter 实例没有注册过至少一个监听器,当一个 'error' 事件触发时,将抛出这个错误,打印堆栈跟踪,并退出 Node.js 进程。

  1. const myEmitter = new MyEmitter();
  2. myEmitter.emit('error', new Error('whoops!'));
  3. // Node.js 抛出错误,随后崩溃

为了防止 Node.js 进程崩溃,可以在进程对象 uncaughtException 事件上注册监听器或使用域(domain)模块(请注意,domain 模块已被弃用)。

  1. const myEmitter = new MyEmitter();
  2. process.on('uncaughtException', (err) => {
  3. console.log('哇哦!这儿有个错误');
  4. });
  5. myEmitter.emit('error', new Error('whoops!'));
  6. // 打印:哇哦!这儿有个错误

作为最佳实践,应该始终为 'error' 事件注册监听器:

  1. const myEmitter = new MyEmitter();
  2. myEmitter.on('error', (err) => {
  3. console.log('哇哦!这儿有个错误');
  4. });
  5. myEmitter.emit('error', new Error('whoops!'));
  6. // 打印:哇哦!这儿有个错误