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