2016-07-26 173 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

谢谢这对我有用! –