NodeJS 事件系统是很多其它NodeJS系统(如net、http(s)等)的基础之一。
事件系统可以定义自己的一套事件系统,并绑定若干处理事件。
事件系统封装在NodeJS的 events
包里,具体API与官方说明参见官方文档。
基本使用姿势
引入 events 包
var events = require('events');
这个 events 是一个类(JS中类即函数),它还有几个成员,其中EventEmitter
这个类跟events类是一样的,这样写的目的是为了跨版本兼容(Node 自身的 API 版本变动)。
events === events.EventEmitter; // true
事件发射器(EventEmitter) 就是一个管理一组事件的对象。
var myEvent = new events(); // create a new event emitter object
触发事件
触发事件使用emitter.emit(eventName: String[, ...argv: Any ]);
来触发,顺便可以在这里传入任意个数、格式不限的参数。
class Person {
constructor (name) {
this.name = name;
}
destroy () {
console.log(this.name, 'dead');
}
}
var Riki = new Person('Riki');
myEvent.on('go-die', person => person.destroy());
myEvent.emit('go-die', Riki); // Riki dead
为事件绑定监听器
有的人喜欢称呼这个动作为”绑定事件”,然而这个说法并不好,因为每个事件名可以对应若干监听器(listener),准确的说应该是为事件绑定监听器,或者是将监听器绑定到事件上。
一次性监听器
一次性监听器在绑定后,只能被触发一次,触发后就自我销毁,下次再触发同样的事件也不会再响应。
使用emitter.once(eve