1. 程式人生 > >nodejs中的events模組中的EventEmitter物件的簡單使用

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的子類;

好了,以上就是我今天要說的全部內容了,有什麼不合理的地方請多多包含啊!