Node.js EventEmitter

events 模塊只提供了一個對象: events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。數組

你能夠經過require("events");來訪問該模塊。函數

//引入events模塊
var events=require("events");
//建立EventEmitter()對象
var eventEmitter=new events.EventEmitter();

 

EventEmitter 對象若是在實例化時發生錯誤,會觸發 error 事件。ui

當添加新的監聽器時,newListener 事件會觸發,當監聽器被移除時,removeListener 事件被觸發。spa

//引入events模塊
var events=require("events");
//建立EventEmitter()對象
var eventEmitter=new events.EventEmitter();

eventEmitter.on("myfn",function(){
    console.log("myfn被觸發了");
})

setTimeout(function(){
    eventEmitter.emit("myfn");//觸發事件
},1000)

 

 

 

帶參數的狀況code

//引入events模塊
var events=require("events");
//建立EventEmitter()對象
var eventEmitter=new events.EventEmitter();

eventEmitter.on("myfn",function(n1,n2){
    console.log(n1+n2);
})

setTimeout(function(){
    eventEmitter.emit("myfn",3,4);//觸發事件
},1000)

 

 

 

EventEmitter() 提供的方法:server

addListener(event, listener)
爲指定事件添加一個監聽器到監聽器數組的尾部。對象

on(event, listener)
爲指定事件註冊一個監聽器,接受一個字符串 event 和一個回調函數。blog

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。

 

類方法:

listenerCount(emitter, event)
返回指定事件的監聽器數量。

events.emitter.listenerCount(eventName) 
//引入events模塊
var events=require("events");
//建立EventEmitter()對象
var eventEmitter=new events.EventEmitter();
var count=eventEmitter.listenerCount("connection");
console.log("connection事件的監聽器數量"+count);

 

事件:

newListener

  • event - 字符串,事件名稱

  • listener - 處理事件函數

該事件在添加新監聽器時被觸發。

 

//引入events模塊
var events=require("events");
//建立EventEmitter()對象
var eventEmitter=new events.EventEmitter();

//監聽器listener1
var listener1=function listener1(){
    console.log("監聽器listener1執行")
}
//監聽器listener2
var listener2=function listener2(){
    console.log("監聽器listener2執行")
}

//爲connection事件綁定兩個監聽器
eventEmitter.on("connection",listener1);
eventEmitter.on("connection",listener2);

//打印監聽器數量
var count=eventEmitter.listenerCount("connection");
console.log("connection事件的監聽器數量"+count);

//觸發connection事件
eventEmitter.emit("connection");

//移除監聽器listener1
eventEmitter.removeListener("connection",listener1);
console.log("監聽器listener1再也不監聽");

//觸發connection事件
eventEmitter.emit("connection");

//移除監聽器listener2
eventEmitter.removeListener("connection",listener2);
console.log("監聽器listener2再也不監聽");

//再次打印監聽器數量
count=eventEmitter.listenerCount("connection");
console.log("connection事件的監聽器數量"+count);

console.log("結束");

 

 

removeListener

  • event - 字符串,事件名稱

  • listener - 處理事件函數

從指定監聽器數組中刪除一個監聽器。須要注意的是,此操做將會改變處於被刪監聽器以後的那些監聽器的索引。

 

EventEmitter 定義了一個特殊的事件 error,它包含了錯誤的語義,咱們在遇到 異常的時候一般會觸發 error 事件。

當 error 被觸發時,EventEmitter 規定若是沒有響 應的監聽器,Node.js 會把它看成異常,退出程序並輸出錯誤信息。

咱們通常要爲會觸發 error 事件的對象設置監聽器,避免遇到錯誤後整個程序崩潰。

//引入events模塊
var events=require("events");
//建立EventEmitter()對象
var eventEmitter=new events.EventEmitter();

//觸發error
eventEmitter.emit("error");

 

 

大多數時候咱們不會直接使用 EventEmitter,而是在對象中繼承它。

包括 fs、net、 http 在內的,只要是支持事件響應的核心模塊都是 EventEmitter 的子類。

相關文章
相關標籤/搜索