2016-07-26 20 views
0

Gibt es eine Möglichkeit, bestimmte Ereignisse nur in einem benutzerdefinierten eventEmitter zuzulassen?Nur bestimmte Ereignisse zulassen

Zum Beispiel, wenn ich etwas haben, wie dies alles funktioniert wie erwartet:

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

ich jede Sekunde auf der ersten Veranstaltung und alle 2 Sekunden auf dem zweiten Ereignis einen Rückruf erhalten. Für den 3. passiert nichts, weil ich dieses Ereignis nicht ausstrahle. Gibt es eine Möglichkeit, dass diese Klasse mir sagt, dass dieses Ereignis nicht definiert ist und ich keinen Listener hinzufügen kann oder dass nur Listener zu Ereignis 1 und 2 hinzugefügt werden können?

Antwort

0

Es gibt keine integrierte Funktionalität, aber Sie können eine Art Wrapper erstellen, um dies zu tun.

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

Danke das funktioniert für mich! –