只允许某些事件
问题描述:
有没有办法让一个自定义eventEmitter中的某些事件?只允许某些事件
例如,如果我有这样的事情一切正常:
const EventEmitter = require('events');
class myEvent extends EventEmitter {
constructor() {
super();
var self = this;
setInterval(function() {
self.emit('1stEvent');
}, 1000)
setInterval(function() {
self.emit('2ndEvent');
}, 2000)
}
}
var MyEvent = new myEvent();
MyEvent.on('1stEvent', function() {
console.log('1st Event triggered');
});
MyEvent.on('2ndEvent', function() {
console.log('2nd Event triggered');
});
MyEvent.on('3rdEvent', function() {
console.log('3rd Event triggered');
});
我得到每一秒钟在第一事件和每2秒2号事件的回调。第三件事情没有发生,因为我不发射这个事件。有没有办法让这个类告诉我这个事件没有定义,我不能添加一个监听器,或者只能添加监听器到事件1和2?
答
没有内置功能,但您可以创建某种包装来执行此操作。
const EventEmitter = require('events');
class myEvent extends EventEmitter {
constructor() {
super();
this._events = new Set();
this._events.add('1stEvent');
this._events.add('2ndEvent');
var self = this;
setInterval(function() {
self.emit('1stEvent');
}, 1000)
setInterval(function() {
self.emit('2ndEvent');
}, 2000)
}
on(event, callback) {
if(!this._events.has(event)) {
console.log('Event not registered');
return;
}
super.on(event, callback);
}
}
谢谢这对我有用! –