promised-map
Version:
A map of promises that can be resolved or rejected by key
97 lines • 2.33 kB
JavaScript
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