node - events模块

95 阅读2分钟

Node中的核心API都是基于异步事件驱动的

  • 在这个体系中,某些对象(发射器(Emitters))发出某一个事 件
  • 我们可以监听这个事件(监听器 Listeners),并且传入的回调 函数,这个回调函数会在监听到事件时调用

所以可以将events模块看成是node中自带的事件总线

在node中发出事件和监听事件都是通过EventEmitter类来完成的,它们都属 于events对象

一些模块,例如stream和http都是继承自events,所以可以在这类模块上使用on,emit等方法

常见方法说明
emitter.on(eventName, listener)监听事件,也可以使用 addListener
emitter.off(eventName, listener)移除事件监听,也可以使用 removeListener
emitter.emit(eventName[, ...args])发出事件,可以携带参数列表
// 引入事件模块
const EventEmitter = require('events')

// 创建全局事件触发器
const emitter = new EventEmitter()

// 事件处理函数 - 单独抽离 便于添加事件和移除事件的时候对应的是同一个事件处理函数
const handler = (name, age) => console.log(name, age)

// 添加事件监听
emitter.on('custom', handler)

// 移除事件监听
emitter.off('custom', handler)

emitter.on('custom', handler)

// 触发事件
// 事件总线在进行参数传递的时候和vue一样
// 传递的是对应的参数列表,不是参数对象
emitter.emit('custom', 'Klaus', 23)
方法说明
emitter.eventNames()返回当前 EventEmitter对象注册的事件字符串数组
emitter.getMaxListeners()返回当前 EventEmitter对象的最大监听器数量
可以通过setMaxListeners()来修改,默认是 10
emitter.listenerCount(事件名称)返回当前 EventEmitter对象某一个事件名称,监听器的个数
emitter.listeners(事件名称)返回当前 EventEmitter对象某个事件监听器上所有的监听器数组
emitter.once(eventName, listener)事件监听一次
emitter.prependListener()将监听事件添加到最前面
emitter.prependOnceListener()将监听事件添加到最前面,但是只监听一次
emitter.removeAllListeners(eventName)移除所有的监听器