节点事件发射器

如何在Node中处理自定义事件

如果您在浏览器中使用JavaScript,您将知道通过事件处理了用户多少交互:鼠标单击,键盘按钮按下,对鼠标移动做出反应,等等。

在后端,Node为我们提供了使用以下选项构建类似系统的选项:events模块

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

您可以使用以下语法初始化EventEmitter对象:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

除其他外,该对象还暴露了onemit方法。

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

发射并监听事件

例如,让我们创建一个start事件,并提供一个示例,我们只需登录控制台即可对此做出反应:

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

当我们跑步

eventEmitter.emit('start')

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

addListener()是的别名on(),以防您看到使用过的内容。

将参数传递给事件

您可以将参数作为附加参数传递给事件处理程序,以将其传递给事件处理程序。emit()

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

eventEmitter.emit(‘start’, 23)

多个参数:

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

eventEmitter.emit(‘start’, 1, 100)

听一次活动

EventEmitter对象还公开了once()方法,可用于创建一次性事件侦听器。

触发该事件后,侦听器将停止侦听。

例子:

eventEmitter.once('start', () => {
  console.log(`started!`)
})

eventEmitter.emit(‘start’) eventEmitter.emit(‘start’) //not going to fire

删除事件监听器

创建事件监听器后,您可以使用removeListener()方法。

为此,我们必须首先具有对的回调函数的引用on

在此示例中:

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

提取回调:

const callback = () => {
  console.log('started')
}

eventEmitter.on(‘start’, callback)

这样以后您可以打电话

eventEmitter.removeListener('start', callback)

您还可以使用以下方法一次删除一个事件中的所有侦听器:

eventEmitter.removeAllListeners('start')

登记事件

eventNames()在EventEmitter对象实例上调用的方法,返回一个字符串数组,这些字符串表示在当前EventListener上注册的事件:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

eventEmitter.on(‘start’, () => { console.log(‘started’) })

eventEmitter.eventNames() // [ ‘start’ ]

listenerCount()返回作为参数传递的事件的侦听器计数:

eventEmitter.listenerCount('start') //1

在其他听众之前/之后添加更多听众

如果您有多个侦听器,则它们的顺序可能很重要。

EventEmitter对象实例提供了一些处理订单的方法。

emitter.prependListener()

当您使用添加监听器时on或者addListener,它被添加到侦听器队列的末尾,并被称为末尾。使用prependListener它是在其他侦听器之前添加和调用的。

emitter.prependOnceListener()

当您使用添加监听器时once,它被添加到侦听器队列的末尾,并被称为末尾。使用prependOnceListener它是在其他侦听器之前添加和调用的。

免费下载我的Node.js手册


更多节点教程: