Nodejs事件監聽模塊

nodejs裏面是不存在瀏覽器裏面都冒泡,捕獲這些行爲的,因此Nodejs實現了events這個模塊,裏面大多數的模塊都集成了這個模塊,因此events是node模塊裏面最重要都一個模塊,他對外只暴露一個對象,就是EventEmitter,EventEmitter做用只有兩個,分別是,事件都發送和事件都監聽。emit支持多個事件監聽,最大值是10個,也就是能夠爲某個事件添加10個監聽函數,來作10件事情,好比
var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();

//這裏不用on,也能夠用addEventListener
life.on('doSth', function(who){
  console.log('給 ' + who + ' 倒水');
})

life.emit('doSth','Sunny');

這個on最多能夠添加10個,添加11個後,會報出一個警告node

 

可是咱們是能夠修改事件監聽都最大值的,加上這行代碼
life.setMaxListeners(11)
放在事件監聽之前

 

事件沒有emit,on相應裏面的動做是不會執行的,怎麼判斷一個事件emit了呢
var hasEmit = life.emit('doOther','lucy');
若是註冊了,會返回true,若是沒註冊,會返回false

 

能夠刪除某一個事件監聽,怎麼監聽,第一不要寫錯名字removeListerner
,第二不能用匿名函數
var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();
 

function water(who){
    console.log('給 ' + who + ' 倒水');
}
//這裏不用on,也能夠用addEventListener
life.on('doSth', water)
 

life.removeListerner('doSth',water);
life.emit('doSth','Sunny');

這樣在10件事裏面移除了倒水這件事瀏覽器



在不知道各個註冊事件下有多少個事件監聽,能夠經過下面的方式檢測不一樣的事件下有多少個監聽函數
console.log( life.listeners('doSth').length )
若是裏面不指明哪一個事件會返回0,

 

另一種獲取事件監聽長度的方式是
console.log( EventEmitter.listenerCount(life,'doSth'))

 

 

批量移除事件的方法
life.removeAllListeners('doSth');
若是裏面 事件名不寫,則刪除全部的事件兼容函數,不單單是doSth的監聽函數
相關文章
相關標籤/搜索