Nodejs学习笔记

nodejs笔记3(EventEmitter)

2018-11-09  本文已影响0人  XKolento

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

1.EventEmitter 类

events是nodejs中的一个模块,它可以提供一个对象 events.EventEmitter()
EventEmitter的核心功能就是事件触发器和事件监听了。
同样的我们可以通过 require('events') 来获取该模块

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。

2.event demo

event在一秒后执行 some_event
event监听 some_event,此时进行回调,打印结果。

var EventEmitter = require('events').EventEmitter; 
var event = new EventEmitter(); 
event.on('some_event', function() { 
    console.log('some_event 事件触发'); 
}); 
setTimeout(function() { 
    event.emit('some_event'); 
}, 1000); 

EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。

当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。

3.EventEmitter各种方法介绍

①addListener(event, listener)
为指定的事件添加监听器
②on(event, listener)
为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。

server.on('connection', function (stream) {
  console.log('someone connected!');
});

③once(event, listener)
为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。

server.once('connection', function (stream) {
  console.log('Ah, we have our first user!');
});

④removeListener(event, listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
它接受两个参数,第一个是事件名称,第二个是回调函数名称。

var callback = function(stream) {
  console.log('someone connected!');
};
server.on('connection', callback);
server.removeListener('connection', callback);

⑤removeAllListeners([event])
移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
⑥setMaxListeners(n)
默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
⑦listeners(event)
返回指定事件的监听器数组。
⑧emit(event, [arg1], [arg2], [...])
按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。

4.EventEmitter demo
var events = require('events');
var eventEmitter = new events.EventEmitter();

//监听器1
var listener1 = function listener1(){
    console.log('监听器 listener1 执行')
}

//监听器2
var listener2 = function listener2(){
    console.log('监听器 listener2 执行')
}

// 绑定 connection 事件,处理函数为 listener1 
eventEmitter.addListener('connection',listener1);

// 绑定 connection 事件,处理函数为 listener2
eventEmitter.on('connection', listener2);

var eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners+"个 监听器监听连接事件")

//触发 connection 事件
eventEmitter.emit('connection');

eventEmitter.removeListener('connection',listener1);
console.log('listener1 监听取消')

//触发连续事件
eventEmitter.emit('connection');

eventListeners = eventEmitter.listenerCount('connection');
console.log(eventListeners+'个监听器监听连接事件');

console.log('程序执行完毕');

①首先添加2个方法 listener1 和 listener2
②然后监听方法 connection,执行的时候,回调listener1
var eventListeners = eventEmitter.listenerCount('connection');获取监听事件个数并且在下面打印出来
④使用emit触发 connection 事件
⑤让listener1 方法取消对 connection 的监听
⑥再次触发 connection
⑦重新统计 监听个数并且打印结果

上一篇下一篇

猜你喜欢

热点阅读