Я хочу настроить 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)