鍍金池/ 教程/ HTML/ Node.js事件發(fā)射器
Node.js快速入門
Node.js事件發(fā)射器
Node.js包(JXcore)
Node.js事件循環(huán)
Node.js文件系統(tǒng)
Node.js npm
Node.js安裝和入門
Node.js工具模塊
Node.js回調(diào)概念
Node.js流
Node.js入門實例程序
Node.js教程
Node.js規(guī)范化應(yīng)用
Node.js REPL終端
Node.js緩沖器
Node.js RESTful API
Node.js全局對象
Linux安裝Node.js(源碼編譯安裝)
Node.js Web模塊
Node.js Express框架

Node.js事件發(fā)射器

在Node很多對象發(fā)出事件,例如net.Server每個同級連接到它,一個fs.readStream發(fā)出打開文件事件時,每次都發(fā)出一個事件。 它發(fā)出事件的所有對象都是events.EventEmitter的實例。

EventEmitter 類

正如我們已經(jīng)看到在上一節(jié),EventEmitter類在于事件的模塊。它是通過通俗易懂的語法如下:

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

EventEmitter實例對任何錯誤,它會發(fā)出一個“error”事件。當(dāng)新的偵聽器被添加,“newListener'事件被觸發(fā),當(dāng)一個偵聽器被刪除,'removeListener”事件被觸發(fā)。

EventEmitter提供多種性能如在發(fā)射。On屬性用于綁定事件函數(shù),發(fā)射用于觸發(fā)一個事件。

方法

S.N. 方法 & 描述
1 addListener(event, listener)
添加一個監(jiān)聽器監(jiān)聽器數(shù)組指定事件的結(jié)束。沒有進行檢查,以查看是否偵聽器已經(jīng)添加。多次調(diào)用傳遞事件和監(jiān)聽器的相同組合,將導(dǎo)致在偵聽器被添加多次。返回發(fā)射器,所以調(diào)用可以鏈接。
2 on(event, listener)
添加一個監(jiān)聽器監(jiān)聽器數(shù)組在未尾指定事件. 沒有進行檢查,以查看是否偵聽器已經(jīng)添加。多次調(diào)用傳遞事件和監(jiān)聽器的相同組合,將導(dǎo)致在偵聽器被添加多次。返回發(fā)射器,所以調(diào)用可以鏈接。
3 once(event, listener)
增加一次監(jiān)聽事件。 監(jiān)聽器調(diào)用僅在下一次事件被觸發(fā),之后被刪除。返回發(fā)射器,所以調(diào)用可以鏈接。
4 removeListener(event, listener)
從偵聽器數(shù)組指定事件刪除監(jiān)聽器。注意:改變數(shù)組索引偵聽器后面監(jiān)聽器數(shù)組中。removeListener將從監(jiān)聽數(shù)組中刪除至多偵聽器一個實例。如果任何一個監(jiān)聽器已經(jīng)被多次添加到偵聽數(shù)組指定事件,然后removeListener必須多次刪除每個實例。返回發(fā)射器,所以調(diào)用可以鏈接。
5 removeAllListeners([event])
刪除所有監(jiān)聽器,或者那些指定的事件。這不是一個好主意,刪除在其他地方添加代碼,特別是當(dāng)它在還沒有創(chuàng)建(如套接字或文件流)發(fā)射器監(jiān)聽器。 返回發(fā)射器,所以調(diào)用可以鏈接。
6 setMaxListeners(n)
默認情況下EventEmitters將打印一個警告,如果超過10個監(jiān)聽器添加特定事件。這是一個有用的默認這有助于發(fā)現(xiàn)內(nèi)存泄漏。顯然,并非所有的發(fā)射器應(yīng)限制在10個,此功能允許增加。設(shè)置為零無限制。
7 listeners(event)
返回監(jiān)聽器為指定事件的數(shù)組。
8 emit(event, [arg1], [arg2], [...])
為了與提供的參數(shù)執(zhí)行每一個監(jiān)聽器。如果事件有監(jiān)聽器返回true,否則為false。

類方法

S.N. 方法 & 描述
1 listenerCount(emitter, event)
返回對于一個給定的事件監(jiān)聽器的數(shù)量。

事件

S.No. 事件 & 描述
1 newListener
  • event - 事件字符串名稱

  • listener - 函數(shù)的事件處理函數(shù)

此事件發(fā)出的偵聽器在任何時間添加。當(dāng)該事件被觸發(fā),監(jiān)聽器可能還沒有被添加到監(jiān)聽的數(shù)組,用于該事件。

2 removeListener
  • event - 字符串事件名稱

  • listener - 函數(shù)的事件處理函數(shù)

此事件發(fā)出任何時當(dāng)要刪除一個偵聽器。當(dāng)該事件被觸發(fā),監(jiān)聽器可能還沒有被從監(jiān)聽的陣列刪除,而用于在事件中刪除。

例子

創(chuàng)建一個名為main.js,使用以下Node.js的代碼js文件:

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

// listener #1
var listner1 = function listner1() {
   console.log('listner1 executed.');
}

// listener #2
var listner2 = function listner2() {
  console.log('listner2 executed.');
}

// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);

// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);

var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

// Fire the connection event 
eventEmitter.emit('connection');

// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");

// Fire the connection event 
eventEmitter.emit('connection');

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");

現(xiàn)在運行main.js看到的結(jié)果:

$ node main.js

驗證輸出

2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.