【问题标题】:Allow only certain events仅允许某些事件
【发布时间】:2016-07-26 12:53:39
【问题描述】:

有没有办法只允许自定义 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 秒收到一个回调。第三次什么也没发生,因为我没有发出这个事件。有没有办法让这个类告诉我这个事件没有定义,我不能给它添加监听器,或者只能给事件 1 和 2 添加监听器?

【问题讨论】:

    标签: javascript node.js dom-events eventemitter


    【解决方案1】:

    没有内置功能,但您可以创建某种包装器来执行此操作。

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

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 2012-05-26
      • 2013-11-06
      • 2020-09-22
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      相关资源
      最近更新 更多