UNPKG

event-emitters

Version:
44 lines 1.31 kB
import { EventEmitter } from './EventEmitter'; /** * Acts the same as EventEmitter but queues messages when there are no subscribers, delivering them * as soon as the first subscriber subscribes. */ export class QueueingEventEmitter extends EventEmitter { constructor() { super(...arguments); this.messageQueue = []; } emit(newMessage) { if (!this.listeners.length) { this.messageQueue.push(newMessage); } else { super.emit(newMessage); } } /** * The queue will still be drained if the subscriber throws error, in the case that the * there are multiple messages with multiple exceptions thrown, only the last one will * be re-thrown. */ subscribe(listener) { super.subscribe(listener); if (this.messageQueue.length) { let error; this.messageQueue.forEach((queuedMessage) => { try { super.emit(queuedMessage); } catch (e) { error = e; } }); this.messageQueue.splice(0); if (error) { throw error; } } return listener; } } //# sourceMappingURL=QueueingEventEmitter.js.map