nodejs中的events模块中的EventEmitter对象的简单使用

由于我只是初步的学习,对于EventEmitter对象的认识只是初步的,

可能有些不合适的地方希望多多包含;

EventEmitter类允许我们注册一个或者多个函数作为监听者,当对应的事件触发后,它们就会触发而执行操作;

1:首先我们要知道EventEmitter对象是在nodejs中的events模块中

而events模块是nodejs安装时自带的,所以我们可以直接引入使用;

使用方式是:

var events=require('events');
var EventEmitter=new events.EventEmitter();

通常我们也可以直接获取EventEmitter对象,然后创建实例:

var EventEmitter=require('events').EventEmitter;
var Emitter=new EventEmitter();

作为一个初学者,我总是把EventEmitter写成eventEmitter,从而导致获取不了对象而出错,希望大家多多注意;

2:接下来我就进一步介绍EventEmitter这个对象的常见的属性和方法吧(不常见的我在这里就不说了,其实我也不太清楚,见笑啦)!

(1)on(eventName,lisenter)------对一个事件注册监听者

var events=require('events');
var EventEmitter=new events.EventEmitter();

EventEmitter.on('connection',listener1);

对于这俩个参数我解释详细一些,一下的基本上是一样的,我就不做多解释啦!

参数一:eventName是一个事件名,对于这个事件,我的理解是它不是一个函数什么的,我们可以这样理解,假设这里有一个请求I/O流文件的异步操作,nodejs会发送一个事件到事件队列中,当这个异步操作完成时,这个事件会被触发从而把请求到的I/O文件作为这个事件的监听函数的参数返回,然后我们就可以接受到请求的文件啦;这里就要说到第二个参数了(listener,所谓的监听函数);

参数二:listener是一个监听函数,它的作用就是当它监听(绑定)的事件被触发(发生)时,这个监听函数被执行;

这个监听函数的作用在这里的作用就是相当于一个回调函数,就是当它所绑定的事件被触发时,它这个假装的回调函数才会执行,但是它和回调函数还是有一些不同的,第一点就是一般的回调函数第一个参数都是error,而listener监听函数的第一个参数不是error,而是触发事件是所传入的参数(即可能是请求到的一些文件);

(2)emit(eventName,listener)-------发布一个事件,或者说触发一个事件

var events=require('events');
var EventEmitter=new events.EventEmittter();

EventEmitter.emit('connection',[arg1],[arg2],....);

参数的含义和on是差不多的,我在这就不做太多解释啦!

(3)removeListener(EventName,listener)

移除指定事件的某个监听器,监听器必须是该事件已经注册的,不然还移除什么是吧!

参数和上面也是一样的;

var evens=require('events');
var EventEmitter=new events.EventEmitter();

var listener1=function(stream){
    console.log('监听器listener1被执行啦!');
};

EventEmitter.on('connection',listener1);

EventEmitter.removeListener('connection',listener1);

注意:使用removeListener我们会从监听器数组中删除这个listener1监听器,这个操作会使原来的数组中 其他监听器的索引改变;

(4)listenerCount(eventName)

返回指定监听器的数量;

var events=require('events');
var EventEmitter=new events.EventEmitter();

//通过设置connection事件的监听函数;
EventEmitter.on('connection',listener1);

EventEmitter.on('connection',listener2);

EventEmitter.on('connection'.listener3);

EventEmitter.listenerCount('connection');//会打印出 :3

 以上就是几个我们在使用时常用的属性以及方法;

3:随着我对EventEmitter地了解,我发现我们在nodejs中并不常用到这个对象,

而是在对象中继承它,包括fs,net,http等模块,只要是支持事件响应的核心模块都是EventEmitter的子类;

好了,以上就是我今天要说的全部内容了,有什么不合理的地方请多多包含啊!

猜你喜欢

转载自blog.csdn.net/Endl_1998/article/details/83898894