个人随记--node(二)

EventEmitter 类

1,events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。

2,EventEmitter 提供了多个属性,如 onemiton 函数用于绑定事件函数,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) 为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。

扫描二维码关注公众号,回复: 3655601 查看本文章

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');

执行结果如下

猜你喜欢

转载自blog.csdn.net/scorpio_meng/article/details/83177134