Skip to content

Events

单个侦听器的简单 EventEmitter 实例。该 eventEmitter.on() 方法用于注册侦听器,而该 eventEmitter.emit() 方法用于触发事件。

on 侦听器

js
const EventEmitter = require('node:events')

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter()
// 注册侦听器
myEmitter.on('event', function(a, b) {
  console.log('参数:', a, b)
  console.log('触发了一个事件', this);

  // 侦听器函数可以使用 setImmediate() or process.nextTick() 方法切换到异步操作模式
  setImmediate(() => {
    console.log('异步发生的')
  })
})

// 触发事件
myEmitter.emit('event', 'aa', 'bb');

once 侦听器

只触发一次事件

js
const EventEmitter = require('node:events')

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter()

let m = 0;
myEmitter.once('event', () => {
  console.log(++m);
})

myEmitter.emit('event');
// 打印: 1

myEmitter.emit('event');
// 没有触发

错误兜底

js
// Node.js 能接收到异常,但是不会崩溃
const EventEmitter = require('node:events')

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter()

myEmitter.on('error', (err) => {
  console.error('哎呀!有一个错误');
});
myEmitter.emit('error', new Error('whoops!'));

另一种方法

js
// 通过使用符号 events.errorMonitor 安装侦听器,可以在不使用发出的错误的情况下监视 'error' 事件
// Node.js 仍然会抛出异常并导致崩溃
const { EventEmitter, errorMonitor } = require('node:events')

const myEmitter = new EventEmitter()

myEmitter.on(errorMonitor, (err) => {
  console.error('哎呀!有一个错误');
})


myEmitter.emit('error', new Error('whoops!'));

Released under the MIT License.