UNPKG

promised-map

Version:

A map of promises that can be resolved or rejected by key

97 lines 2.33 kB
export class PromisedMap { constructor() { this.map = new Map(); } /** * Returns map size. */ get size() { return this.map.size; } /** * Sets key/data pair and creates related promise. * If key already exists in map - it will be replaced with new data and new promise. */ set(key, data) { const item = this.createMapItem(data); this.map.set(key, item); return item.promise; } /** * Returns data for key. */ get(key) { const item = this.map.get(key); return item && item.data; } /** * Checks if key exists. */ has(key) { return this.map.has(key); } /** * Deletes key from map. * Caution: previously returned promise will no be resolved or rejected. */ delete(key) { return this.map.delete(key); } /** * Resolves promise in map by key and removes key from map. * If no such key in map - nothing happens. */ resolve(key, value) { const item = this.map.get(key); if (item) { this.delete(key); item.resolve(value); } } /** * Rejects promise in map by key and removes key from map. * If no such key in map - nothing happens. */ reject(key, reason) { const item = this.map.get(key); if (item) { this.delete(key); item.reject(reason); } } /** * Resolves all promise in map and removes all keys. */ resolveAll(value) { this.map.forEach(item => item.resolve(value)); this.map.clear(); } /** * Rejects all promise in map and removes all keys. */ rejectAll(reason) { this.map.forEach(item => item.reject(reason)); this.map.clear(); } /** * Iterate map. */ forEach(fn) { this.map.forEach((item, key, map) => fn(item.data, key, map)); } /** * Clears map. */ clear() { return this.map.clear(); } createMapItem(data) { const item = { data }; item.promise = new Promise((resolve, reject) => { item.resolve = resolve; item.reject = reject; }); return item; } } //# sourceMappingURL=index.js.map