Nodejs.2

參考內容:
Node.js EventEmitter

四、Node.js EventEmitter

Node.js所有異步I/O操作在完成時都會發送一個事件到事件隊列;
Node.js里許多對象都會分發事件:一個net.Server對象會在每次有新連接時分發一個事件,一個fs.readStream對象會在文件被打開時發出一個事件。所有這些產生事件的對象都是events.EventEmitter的實例。

EventEmitter類

  1. events模塊只提供了一個對象:events.EventEmitter,它的核心是事件觸發與事件監聽器功能的封裝。可以通過require('events');來訪問該模塊。
// 引入events模塊
var events = require('events');
// 創建eventEmitter對象
var eventEmitter = new events.EventEmitter();
  • EventEmitter對象如果在實例化時發生錯誤,會觸發error事件;當添加新監聽器時,newListener事件會觸發;當監聽器被移除時,removeListener事件被觸發。該對象用法如下:
// 2.4.event.js文件
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);
  • 運行代碼,1s后控制臺輸出'some_event 事件觸發'。原理是event對象注冊了事件some_event的一個監聽器,然后我們通過serTimeout在1000毫秒后向event對象發送事件some_event,此時調用some_event的監聽器。


    觸發some_event綁定的事件
  • EventEmitter的每個事件由一個事件名和若干參數組成,事件名是一個字符串,通常表達一定的語義;對于每個事件,Event Emitter支持若干個事件監聽器。
    當事件觸發時,注冊到這個事件的監聽器被依次調用,事件參數作為回調函數參數傳遞。

var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('someEvent', function(arg1, arg2) {
    console.log('listener1', arg1, arg2);
});
emitter.on('someEvent', function(arg1, arg2) {
    console.log('listener2', arg1, arg2);
});
emitter.emit('someEvent', 'arg1參數', 'arg2參數');
以上代碼運行結果
方法
NO. 方法&描述(詳情見參考鏈接)
1 addListener(event, listener)
為指定事件添加一個監聽器到監聽器數組的尾部。
2 on(event, listener)
為指定事件注冊一個監聽器,接受一個字符串event和一個回調函數。
3 once(event, listener)
為指定事件注冊一個單次監聽器,即監聽器最多只會觸發一次,觸發后立刻解除該監聽器。
4 removeListener(event, listener)
移除指定事件的某個監聽器,監聽器必須是該事件已經注冊過的監聽器。
它接受兩個參數,第一個是事件名稱,第二個是回調函數名稱。
5 removeAllListener([event])
移除所有事件的所有監聽器,如果指定事件,則移除指定事件的所有監聽器。
6 setMaxListener(n)
默認情況下, EventEmitters 如果你添加的監聽器超過 10 個就會輸出警告信息。
setMaxListeners 函數用于提高監聽器的默認限制的數量。
7 listeners(event)
返回指定事件的監聽器數組。
8 emit(event, [arg1], [arg2], [...])
按參數的順序執行每個監聽器,如果事件有注冊監聽返回 true,否則返回 false。
類方法
NO. 方法&描述(詳情見參考鏈接)
1 listenerCount(emitter, event)
返回指定事件的監聽器數量。

其余參見參考內容鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Node.js EventEmitter Node.js 所有的異步 I/O 操作在完成時都會發送一個事件到事件隊...
    FTOLsXD閱讀 326評論 1 2
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,396評論 0 6
  • node 基本語法 npm 簡介 NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多...
    big5閱讀 307評論 0 0
  • DNS 這是一個與DNS相關的庫這個庫有兩種方式第一種是使用系統的底層解析 不需要網絡通訊 第二種是像DNS去獲取...
    阿瑟李閱讀 318評論 0 1
  • 今年二月參加了一次學習活動,講的是用思維導圖做年度規劃,由此我的第一份年度規劃出爐。 記得當時在群里討論這個事情時...
    玉妃說閱讀 397評論 0 0