6.NodeJs事件模塊

常用事件模塊


由于本人也是才開始學習Node,所以這里只簡單的講點Scott老師來視頻中講解的事件,后續在進行總結!

官網Api

首先導入events模塊

var EventEmitter = require('events').EventEmitter;
var life = New EventEmitter();

解釋一下:

Node.js核心API的大部分是圍繞一個慣用的異步事件驅動架構構建的,其中某些類型的對象(稱為“發射器”)周期性地發出命名事件,使得調用Function對象(“偵聽器”)。

添加一個事件(addListener)括號中的也可以使用

on(eventName,listener)

  • 參數一:事件的名稱或者字符串
  • 參數二:回調函數
  • 官方建議最多添加10事件,可更改最大值:emitter.setMaxListeners(num),多了容易內存泄漏
life.on('EV', function(a) {
  console.log(a);//參數,由emit傳遞
});

創建事件是一個發射器,接受器 emit

emitter.emit(eventName,[...args])
返回值為boolean

  • true:有監聽器
  • false:無
var isTure = life.emit('EV','參數')//返回一個true
//第二個參數會傳遞到on里的回調函數中去

說到發出事件,接收事件,怎么刪除呢? Scott老師在視頻中也講到了一個坑:不能移除一個匿名函數

移除事件的時候只能移除具名函數

移除某個事件:
left.removeListener(eventName,listener)

//Scott老師為了便于大家理解,寫的偽代碼
function water(who){
    console.log('給'+ who + '倒水')!
}
life.on('求安慰',water);
life.removeListener('求安慰',water);//解除成功

移除全部事件:life.removeAllListeners(EventName)

  • 不傳參數全部刪除
  • 帶參數:刪除為參數名的事件

獲某個事件的集合:life.listeners(eventName)
可以加length獲得總數

EventEmitter.listenerCount(eventName);4.0已被棄用
官方推薦使用emitter.listenerCount(eventName)返回事件的數目

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

推薦閱讀更多精彩內容