theatre-events
Version:
A full implementation of a standard event dispatcher for javascript
57 lines • 1.69 kB
JavaScript
;
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