Настройка Node EventEmitter - PullRequest
0 голосов
/ 05 марта 2019

Я хочу настроить Node EventEmitter для достижения трех целей: 1) дайте мне знать, если событие отправлено, но не имеет прослушивателей, 2) автоматически регистрировать это, используя мой собственный модуль отладки (без необходимости исправления или вставки каких-либодополнительный код где-либо еще) и 3) передать идентификатор, чтобы я знал, из какого EventEmitter произошло это событие журнала.Объединяя все здесь, это то, что я придумал, и я хотел бы знать, есть ли у кого-нибудь какие-либо предложения по улучшению или лучший способ сделать это:

const debugger = new SuperDuperDebugger();
const nodeEventEmitter = require('events').EventEmitter;
class EventEmitter extends nodeEventEmitter {
    constructor() {
        super();
    }
    emit() {
        let debugId = this.debugId + " " || '';
        let eventName = arguments[0];
        if (!super.listenerCount(eventName)) {
            debugger.error(debugId + eventName + " event emitted without listener(s)");
            return false;
        }
        super.emit.apply(this, arguments);
    }
}

const usbEvents = new EventEmitter();
usbEvents.debugId = 'USB';

const bluetoothEvents = new EventEmitter();
bluetoothEvents.debugId = 'Bluetooth';

const otherEvents = new EventEmitter();

// example usage
usbEvents.emit('foo');
bluetoothEvents.emit('bar');
otherEvents.emit('baz');
debugger.output();

// output
ERROR: USB foo event called without listener(s)
ERROR: Bluetooth bar event called without listener(s)
ERROR: baz event called without listener(s)

...