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