promised-map
Version:
A map of promises that can be resolved or rejected by key
106 lines • 3.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PromisedMap = void 0;
var PromisedMap = /** @class */ (function () {
function PromisedMap() {
this.map = new Map();
}
Object.defineProperty(PromisedMap.prototype, "size", {
/**
* Returns map size.
*/
get: function () {
return this.map.size;
},
enumerable: false,
configurable: true
});
/**
* Sets key/data pair and creates related promise.
* If key already exists in map - it will be replaced with new data and new promise.
*/
PromisedMap.prototype.set = function (key, data) {
var item = this.createMapItem(data);
this.map.set(key, item);
return item.promise;
};
/**
* Returns data for key.
*/
PromisedMap.prototype.get = function (key) {
var item = this.map.get(key);
return item && item.data;
};
/**
* Checks if key exists.
*/
PromisedMap.prototype.has = function (key) {
return this.map.has(key);
};
/**
* Deletes key from map.
* Caution: previously returned promise will no be resolved or rejected.
*/
PromisedMap.prototype.delete = function (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.
*/
PromisedMap.prototype.resolve = function (key, value) {
var 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.
*/
PromisedMap.prototype.reject = function (key, reason) {
var item = this.map.get(key);
if (item) {
this.delete(key);
item.reject(reason);
}
};
/**
* Resolves all promise in map and removes all keys.
*/
PromisedMap.prototype.resolveAll = function (value) {
this.map.forEach(function (item) { return item.resolve(value); });
this.map.clear();
};
/**
* Rejects all promise in map and removes all keys.
*/
PromisedMap.prototype.rejectAll = function (reason) {
this.map.forEach(function (item) { return item.reject(reason); });
this.map.clear();
};
/**
* Iterate map.
*/
PromisedMap.prototype.forEach = function (fn) {
this.map.forEach(function (item, key, map) { return fn(item.data, key, map); });
};
/**
* Clears map.
*/
PromisedMap.prototype.clear = function () {
return this.map.clear();
};
PromisedMap.prototype.createMapItem = function (data) {
var item = { data: data };
item.promise = new Promise(function (resolve, reject) {
item.resolve = resolve;
item.reject = reject;
});
return item;
};
return PromisedMap;
}());
exports.PromisedMap = PromisedMap;
//# sourceMappingURL=index.js.map