只允许某些事件

Allow only certain events

有没有办法在自定义 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 秒收到一次回调。第三次没有任何反应,因为我没有发出这个事件。有没有办法让这个 class 告诉我这个事件没有定义,我不能给它添加一个监听器,或者只能给事件 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);
    }

}