EventEmitter 类
1,events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
2,EventEmitter 提供了多个属性,如 on 和 emit。on 函数用于绑定事件函数,emit 属性用于触发一个事件。
对象创建 :
var eventEmitter = new events.EventEmitter();
代码示例:
var events = require("events");
//创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
//创建事件处理程序
var connectHandler = function () {
console.log("连接成功");
//触发 data_received 事件
eventEmitter.emit("data_received");
}
//绑定 connection 事件处理程序
eventEmitter.on("connection",connectHandler);
//使用匿名函数绑定 data_received 事件
eventEmitter.on("data_received",function () {
console.log("数据接收成功");
});
//触发事件 服务启动后,先执行此代码
eventEmitter.emit("connection");
console.log("程序执行完毕");
服务启动后,利用emit触发绑定的名称为connection事件。然后进行整个程序的执行,connection事件又对data_received事件进行触发。
除了立即触发事件,也可以延迟触发和间歇性触发:
//3秒后执行
setTimeout(function() {
eventEmitter.emit('connection');
}, 3000);
//每隔3秒就会执行
setInterval(function () {
eventEmitter.emit('connection');
},3000);
注:同一个事件,可以添加多个监听器。
//监听器 listener1 和 listener2
var listener1 = function (){
console.log('监听器 listener1 执行。');
}
var listener2 = function (){
console.log('监听器 listener2 执行。');
}
//给connection事件绑定监听器listener1和listener2
eventEmitter.addListener("connection", listener1);
eventEmitter.addListener("connection", listener2);
EventEmitter 其他属性
1,addListener(event, listener),和on(event, listener) 一样,都是给事件添加一个监听器,暂未发现不同
2,once(event, listener) 为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
3,removeListener(event, listener) 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
var events = require("events");
//创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
//监听器 listener1 和 listener2
var listener1 = function (){
console.log('监听器 listener1 执行。');
}
var listener2 = function (){
console.log('监听器 listener2 执行。');
}
//给connection事件绑定监听器listener1和listener2
eventEmitter.addListener("connection", listener1);
eventEmitter.addListener("connection", listener2);
//触发connection事件 此时,listener1和listener2 都会执行
eventEmitter.emit('connection');
//移除listener1监听器
eventEmitter.removeListener("connection",listener1);
console.log("listener1 被删除");
//触发connection事件 此时,只有listener2会执行
eventEmitter.emit('connection');
执行结果如下