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

相关文章
相关标签/搜索