node --EventEmitter

node的全部異步I/O操做在完成的時候 都會 發送一個事件到 事件隊列。
node裏面不少對象都會分發事件,這些對象都是events.EventEmitter的實例。
EventEmitter類
events模塊只提供了一個對象:events.EventEmitter。EventEmitter的核心就是事件觸發與事件監聽。
示例以下node

//導入模塊
var EventEmitter = require('events').EventEmitter;
//建立事件對象
var eventsEmitter = new EventEmitter();
//添加一個listener到事件event_one
//eventsOne對象註冊了事件event_one的監聽器
eventsEmitter.on('event_one',function(arg1,arg2){
	console.log('listener1 事件觸發',arg1);
});
eventsEmitter.on('event_one',function(arg1,arg2){
	console.log('listener2 事件觸發',arg2);
});
//node的定時器
//1s後執行function()
setTimeout(function(){
	//執行指定事件event_one的listener,若事件有listener,則返回true,不然返回fasle
	//觸發事件event_one的監聽器
	//傳參cc和dd
	eventsEmitter.emit('event_one','cc','dd');
},1000);

執行結果以下
輸入圖片說明
實例2異步

//加載模塊
var events = require('events');
var eventsEmitter = new events.EventEmitter();
//監聽器1
var listener1 = function listener1(){
	console.log('執行監聽器1');
}
//監聽器2
var listener2 = function listener2(){
	console.log('執行監聽器2');
}
//添加監聽器1到事件someEvent
eventsEmitter.addListener('someEvent',listener1);
//綁定監聽器2到事件someEvent
eventsEmitter.on('someEvent',listener2);

//eventsEmitter對象上someEvent事件有多少個監聽器
var eventsListeners = require('events').EventEmitter.listenerCount(eventsEmitter,'someEvent');
console.log(eventsListeners+'個監聽事件');

//觸發監聽事件
eventsEmitter.emit('someEvent');

//移除綁定的監聽器
eventsEmitter.removeListener('someEvent',listener1);
console.log('移除listener1');

//再次觸發監聽事件
eventsEmitter.emit('someEvent');
eventsListeners = require('events').EventEmitter.listenerCount(eventsEmitter,'someEvent');
console.log(eventsListeners+'個監聽事件');
console.log('程序執行完畢');

執行結果以下
輸入圖片說明ui

相關文章
相關標籤/搜索