在Node.js中,事件发射器是定义在events模块的EventEmitter类。获取EventEmitter类的方式如下。
当EventEmitter类实例新增监听器时,会触发newListener事件;当移除已存在的监听器时,则触发removeListener事件。
eventEmitter. emit()方法可以传递任意数量的参数到监听器函数。当监听器函数被调用时,this关键词会被指向监听器所绑定的EventEmitter实例。以下是示例。
也可以使用ES6的lambda表达式作为监听器,但this关键词不会指向EventEmitter实例。以下是示例。
本节例子可以在“events-demo/parameter-this.js”和“events-demo/parameter-lambda.js”文件中找到。
EventEmitter会按照监听器注册的顺序同步地调用所有监听器。所以必须确保事件的排序正确,且避免竞态条件。可以使用setImmediate()或process.nextTick()切换到异步模式。
本节例子可以在“events-demo/set-immediate.js”文件中找到。
当使用eventEmitter.on()注册监听器时,监听器会在每次触发命名事件时被调用。
使用eventEmitter.once()可以注册最多可调用一次的监听器。当事件被触发时,监听器会被注销,然后再调用。
本节例子可以在“events-demo/emitter-once.js”文件中找到。