2016-07-26 3 views
0

Есть ли способ разрешить определенные события в пользовательском 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?

ответ

0

Нет встроенных функций, но вы можете создать своего рода оболочку для этого.

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); 
    } 

} 
+0

Спасибо, что работает для меня! –