- EventEmitter类
EventEmitter的核心就是事件触发和事件监听功能的封装.
支持事件响应的核心模块都是EventEmitter的子类,一般使用子类就可以了.
EventEmitter的简单例子EventEmitterDemo.js如var events = require('events');//引入模块 //events模块只提供了一个对象events.EventEmitter var eventEmitter = new events.EventEmitter();//创建eventEmitter对象 eventEmitter.on('event_name',function(arg1,arg2){//回调参数接收事件参数 console.log('event_name 1 with two arguments',arg1,arg2); }); //为相同事件注册第二个事件监听器 eventEmitter.on('event_name',function(arg1,arg2,arg3){ console.log('event_name 2 with three arguments',arg1,arg2,arg3); }); //为相同事件注册第三个事件监听器 eventEmitter.on('event_name',function(){ console.log('event_name 3 without argument'); }); eventEmitter.emit('event_name');//触发事件 console.log('----------'); setTimeout(function(){ eventEmitter.emit('event_name','参数1','参数2');//触发事件,包含事件参数 },1000);
运行结果
>node EventEmitterDemo.js event_name 1 with two arguments undefined undefined event_name 2 with three arguments undefined undefined undefined event_name 3 without argument ---------- event_name 1 with two arguments 参数1 参数2 event_name 2 with three arguments 参数1 参数2 undefined event_name 3 without argument
- EventEmitter类方法,EventEmitter实例方法与事件
EventEmitter.js内容如var events = require('events'); var eventEmitter = new events.EventEmitter(); /*--------------事件---------------*/ //EventEmitter内置事件,程序异常触发error事件,没有监听器Node.js输出错误并退出 //建议为会触发error事件的对象添加监听器,避免整个程序奔溃 eventEmitter.on('error',function(){ console.log('error catched'); }); eventEmitter.emit('error'); //EventEmitter内置事件,eventEmitter实例移除监听器时removeListener事件会被触发 eventEmitter.on('removeListener',function(event,fn){ console.log('remove a Listener',event,fn); }); //EventEmitter内置事件,eventEmitter实例添加新的监听器时newListener事件会被触发 eventEmitter.on('newListener',function(event,fn){ console.log('add new Listener',event,fn); }); /*--------------类方法----------------*/ //返回eventEmitter实例指定事件的监听器个数 var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name'); var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener'); console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count); /*--------------方法----------------*/ //单个事件的监听器数量默认为10,超出会有警告信息,可以提高监听器默认限制的数量 eventEmitter.setMaxListeners(3); //注册一个监听器 eventEmitter.on('event_name',function(arg1){ console.log('this is a listener added by on with argument',arg1); }); //注册监听器到监听器数组的尾部 eventEmitter.addListener('event_name',function(arg1,arg2){ console.log('this is a listener added by addListener with arguments',arg1,arg2); }); //注册一个单次监听器,被触发后先触发removeListener事件后再执行本监听器,最后移除本监听器 eventEmitter.once('event_name',function(){ console.log('this is a listener added by once'); }); var eventHandler = function(){ console.log('this is a listener with a name eventHandler'); }; eventEmitter.on('event_name',eventHandler); console.log('------------------event_name事件的监听器数组-------------'); //返回指定事件的监听器数组 var eventListenersArray = eventEmitter.listeners('event_name'); console.log(eventListenersArray); console.log('-------------------触发event_name事件---------------------'); //触发监听事件,有监听器返回true,否则返回false var hasEventHandler = eventEmitter.emit('event_name','参数1','参数2'); console.log('hasEventHandler:' + hasEventHandler); setTimeout(function(){ eventEmitter.emit('event_name'); },1000); console.log('---------------------------------------------'); var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name'); var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener'); console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count); console.log('-----------------移除eventHandler监听器----------------------'); //移除指定监听器 eventEmitter.removeListener('event_name',eventHandler); var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name'); var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener'); console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count); console.log('----------------移除event_name事件所有监听器-------------------'); //移除指定事件的所有监听器 eventEmitter.removeAllListeners('event_name'); var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name'); var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener'); console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count); console.log('---------------移除eventEmitter实例所有监听器-----------------------'); //移除所有的监听器 eventEmitter.removeAllListeners(); var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name'); var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener'); console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count);
运行结果如>node EventEmitter.js error catched event_name_count:0 remove_listener_count:1 add new Listener event_name function (arg1){ console.log('this is a listener added by on with argument',arg1); } add new Listener event_name function (arg1,arg2){ console.log('this is a listener added by addListener with arguments',ar 1,arg2); } add new Listener event_name function (){ console.log('this is a listener added by once'); } add new Listener event_name function (){ console.log('this is a listener with a name eventHandler'); } ------------------event_name事件的监听器数组------------- [ [Function], [Function], { [Function: g] listener: [Function] }, [Function: eventHandler] ] -------------------触发event_name事件--------------------- this is a listener added by on with argument 参数1 this is a listener added by addListener with arguments 参数1 参数2 remove a Listener event_name function (){ console.log('this is a listener added by once'); } this is a listener added by once this is a listener with a name eventHandler hasEventHandler:true --------------------------------------------- event_name_count:3 remove_listener_count:1 -----------------移除eventHandler监听器---------------------- remove a Listener event_name function (){ console.log('this is a listener with a name eventHandler'); } event_name_count:2 remove_listener_count:1 ----------------移除event_name事件所有监听器------------------- remove a Listener event_name function (arg1,arg2){ console.log('this is a listener added by addListener with arguments',ar 1,arg2); } remove a Listener event_name function (arg1){ console.log('this is a listener added by on with argument',arg1); } event_name_count:0 remove_listener_count:1 ---------------移除eventEmitter实例所有监听器----------------------- remove a Listener error function (){ console.log('error catched'); } remove a Listener newListener function (event,fn){ console.log('add new Listener',event,fn); } event_name_count:0 remove_listener_count:0 (node:26660) Warning: Possible EventEmitter memory leak detected. 4 event_name isteners added. Use emitter.setMaxListeners() to increase limit
03.node.js事件类EventEmitter
猜你喜欢
转载自itnotesblog.iteye.com/blog/2393043
今日推荐
周排行