EventEmitter 类

const EventEmitter = require('events');
'newListener' 事件
    当新增监听器时,在新的监听器被添加到其内部监听器数组之前触发
'removeListener' 事件
    当移除已存在的监听器时触发 

事件上监听器的数量

  • 最大限制数量

       当前的监听器最大限制数的默认值:EventEmitter.defaultMaxListeners()
       获取EventEmitter当前的监听器最大限制数的值:emitter.getMaxListeners()
       设置EventEmitter当前的监听器最大限制数的值:emitter.setMaxListeners(n)
  • 当前数量

       返回正在监听的名为 eventName 的事件的监听器的数量: emitter.listenerCount(eventName)
       废弃:EventEmitter.listenerCount(emitter, eventName)

在事件上添加/删除监听器

  • 添加

       监听器会在每次触发命名事件时被调用
           添加 listener 函数到名为 eventName 的事件的监听器数组的末尾
               emitter.on(eventName, listener)
                   别名:emitter.addListener(eventName, listener)
           添加 listener 函数到名为 eventName 的事件的监听器数组的开头
               emitter.prependListener(eventName, listener)
       监听器只在第一次触发命名事件时被调用一次
           添加单次监听器 listener 到名为 eventName 的事件的监听器数组的末尾
               emitter.once(eventName, listener)
           添加单次监听器 listener 到名为 eventName 的事件的监听器数组的开头
               emitter.prependOnceListener(eventName, listener)
  • 删除

       从名为 eventName 的事件的监听器数组中移除指定的 listener
           emitter.removeListener(eventName, listener)
               别名:emitter.off(eventName, listener)
       移除全部监听器或指定的 eventName 事件的监听器
           emitter.removeAllListeners([eventName])

触发事件

emitter.emit(eventName[, ...args])
    1. 按照监听器注册的顺序,同步地(顺序的依次)调用每个注册到名为 eventName 的事件的监听器,并传入提供的参数。可以使用 setImmediate() 或 process.nextTick() 切换到异步模式。
    2. 在事件触发之后、且最后一个监听器执行完成之前, removeListener() 或 removeAllListeners() 不会从 emit() 中移除绑定的监听器
    3. 如果事件有监听器,则返回 true,否则返回 false

获取已注册监听器的事件名数组

emitter.eventNames()
    数组中的值为字符串或 Symbol

获取事件监听器数组

获取事件监听器数组的副本
    emitter.listeners(eventName)
获取事件监听器数组的拷贝,包括封装的监听器(例如由 .once() 创建的)
    emitter.rawListeners(eventName)

ocean
4 声望1 粉丝