常用事件模塊
由于本人也是才開始學習Node,所以這里只簡單的講點Scott老師來視頻中講解的事件,后續在進行總結!
首先導入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)
返回事件的數目