Skip to content

Node.js 事件发射器

如果你在浏览器中使用过 JavaScript,你就会知道用户交互有多少是通过事件处理的:鼠标点击、键盘按键、鼠标移动反应等等。

在后端,Node.js 提供了使用**events 模块**构建类似系统的选项。

此模块特别提供了 EventEmitter 类,我们将用它来处理我们的事件。

你可以这样初始化它:

js
import EventEmitter from 'node:events'
const eventEmitter = new EventEmitter()

这个对象公开了一些方法,其中包括 onemit 方法。

  • emit 用于触发事件
  • on 用于添加一个回调函数,该函数将在触发事件时执行

例如,让我们创建一个 start 事件,并作为一个示例,我们通过记录到控制台来做出反应:

js
eventEmitter.on('start', () => {
  console.log('started')
})

当我们运行

js
eventEmitter.emit('start')

事件处理程序函数被触发,我们得到控制台日志。

你可以通过将它们作为附加参数传递给 emit() 来将参数传递给事件处理程序:

js
eventEmitter.on('start', number => {
  console.log(`started ${number}`)
})
eventEmitter.emit('start', 23)

多个参数:

js
eventEmitter.on('start', (start, end) => {
  console.log(`started from ${start} to ${end}`)
})
eventEmitter.emit('start', 1, 100)

EventEmitter 对象还公开了其他几种与事件交互的方法,例如

  • once(): 添加一个一次性监听器
  • removeListener() / off(): 从事件中移除事件监听器
  • removeAllListeners(): 移除事件的所有监听器

你可以在events 模块文档中阅读更多关于这些方法的信息。