nodejs-event-driven
Version:
NodeJS agnostic event driven with EventEmitter support
50 lines • 1.93 kB
JavaScript
import { EventEmitter } from 'node:events';
import { BaseEventBusService } from '../../../base-event-bus.service.js';
export default class MemoryEventBusService extends BaseEventBusService {
#logger;
#emitDelay;
#eventEmitter;
constructor(config) {
super();
this.#logger = config.logger;
this.#emitDelay = config.eventBusMemoryEmitDelay;
this.#eventEmitter = new EventEmitter();
}
on(eventName, listener) {
this.#logger?.debug(`register listener for event: ${eventName}`);
this.#eventEmitter.on(eventName, listener);
}
once(eventName, listener) {
this.#logger?.debug(`register once listener for event: ${eventName}`);
this.#eventEmitter.once(eventName, listener);
}
off(eventName, listener) {
this.#logger?.debug(`unregister listener for event: ${eventName}`);
this.#eventEmitter.off(eventName, listener);
}
send(eventName, data) {
if (this.#emitDelay) {
this.#logger?.debug(`will send event later (${this.#emitDelay}ms): ${eventName} with ${String(data)}`);
setTimeout(() => {
this.#eventEmitter.emit(eventName, data);
}, this.#emitDelay);
return;
}
this.#logger?.debug(`sending event: ${eventName} with ${String(data)}`);
process.nextTick(() => {
this.#eventEmitter.emit(eventName, data);
});
}
sendAndWait(sendEventName, successEventName, errorEventName, data) {
this.#logger?.debug(`sending event ${sendEventName} and waiting for event ${successEventName}…`);
return super.sendAndWait(sendEventName, successEventName, errorEventName, data);
}
start() {
return Promise.resolve();
}
stop() {
this.#eventEmitter.removeAllListeners();
return Promise.resolve();
}
}
//# sourceMappingURL=memory-event-bus.service.js.map