首页 > 试题广场 >

简单实现Node的Events模块

[问答题]
简单实现Node的Events模块

实例1:

var events=require('events');
var myEmitter = new events.EventEmitter();
//如果事件已经注册,执行事件,返回true
//如果事件没有注册,返回false
var result=myEmitter.emit('sayHello');
console.log(result);//false
实例2,添加或移除事件:
var events=require('events');
var emitter=new events.EventEmitter();
//注册事件链
emitter.on('someEvent',(arg1,arg2)=>{     console.log('listener1,',arg1,arg2);
});
emitter.on('someEvent',(arg1,arg2)=>{     console.log('listener2,',arg1,arg2);
});
var sayHello=()=>{     console.log('Hello events');
};
emitter.on('sayHello',sayHello);
//移除单个事件
//emitter.removeListener('sayHello',sayHello);
//移除所有事件
//emitter.removeAllListeners();
//移除事件链
//emitter.removeAllListeners('someEvent');
//获取事件数量,如果没有指定事件名称返回0
var count=emitter.listenerCount('someEvent');  
console.log(count); //2
setTimeout(()=>{     //触发事件     emitter.emit('someEvent','参数1','参数2');     //触发事件     emitter.emit('sayHello','参数1');     console.log('事件触发完毕');
},2000);
实例3.EventEmitter已定义事件:
//EventEitter 中事件监听
var events = require('events');
var util=require('util');
var emitters = new events.EventEmitter();
//如果有移除事件时触发
//一般建议先注册移除监听,再注册添加监听,否则,当注册removeListener时也会触发newListener
emitters.on('removeListener',(event,listener)=>{     console.log('remove:'+event); //sayHello     //console.log(listener);
});
//如果有新注册事件时触发
//每次注册都触发,例如sayHello 注册了两个函数,则触发两次
emitters.on('newListener', (event, listenter) => {
    console.log('add:'+event); //sayHello
    //console.info(listenter); // [Function]
    //console.log(util.inspect(listenter,true)); //{ [Function] [length]: 0, [name]: '' }
});
//注册自定义事件
emitters.on('sayHello',()=>{     console.log('Hello events');
});
emitters.on('sayHello',()=>{     console.log('Hello events 2');
});
//移除自定义事件
emitters.removeAllListeners('sayHello');
// //触发事件
emitters.emit('sayHello');

发表于 2019-05-04 10:06:30 回复(0)