UNPKG

theatre-events

Version:

A full implementation of a standard event dispatcher for javascript

57 lines 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const event_listener_1 = require("./../event-listener"); /** * An asynchronous implementation of an event broadcaster */ class AsynchronousEventBroadcaster { constructor() { this.subscribers = new Map(); } /** * {@inheritdoc} */ broadcast(payload) { let promises = []; let priorities = []; this.subscribers.forEach((s, priority) => priorities.push(priority)); priorities.sort().map((priority) => { this.subscribers.get(priority).map(s => promises.push(s(payload))); }); return Promise.all(promises).then(() => payload); } /** * {@inheritdoc} */ subscribe(subscriber) { subscriber.priority = subscriber.priority || event_listener_1.NORMAL_PRIORITY; if (!this.subscribers.get(subscriber.priority)) { this.subscribers.set(subscriber.priority, []); } this.subscribers.get(subscriber.priority).push(subscriber); } /** * {@inheritdoc} */ remove(subscriber) { this.subscribers.forEach((subscribers, priority) => { subscribers.map((s, i) => { if (s !== subscriber) { return; } subscribers.splice(i, 1); }); if (!subscribers.length) { this.subscribers.delete(priority); } }); } /** * {@inheritdoc} */ clear() { this.subscribers = new Map(); } } exports.default = AsynchronousEventBroadcaster; //# sourceMappingURL=asynchronous-event-broadcaster.js.map