Is there a way to only allow certain events in a custom eventEmitter
?
For example, if I have something like this everything works as expected:
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'); });
I get a callback every second on the first event and every 2 seconds on the 2nd event. For the 3rd nothing happens, because I don’t emit this event. Is there a way that this class tells me that this event is not defined and I cannot add a listener to it, or that it is only possible to add listeners to event 1 and 2?
Advertisement
Answer
There is no built-in functionality, but you can create some kind of wrapper to do this.
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); } }