@opsimathically/deferred
Version:
Utility classes for working with the asynchronous deferral pattern.
83 lines (81 loc) • 2.3 kB
JavaScript
// src/Deferred.class.ts
var Deferred = class {
constructor(params) {
this.already_completed = false;
this.timeout = null;
this.deferred_map_ref = null;
const defer_ref = this;
this.promise = new Promise((resolve, reject) => {
defer_ref.resolve_real = resolve;
defer_ref.reject_real = reject;
});
if (params) {
if (typeof params.autotimeout_ms === "number") {
defer_ref.timeout = setTimeout(
(param) => {
param.resolve(null);
},
params.autotimeout_ms,
this
);
}
if (params.deferred_map_ref) {
defer_ref.deferred_map_ref = params.deferred_map_ref;
defer_ref.deferred_map_ref.set(defer_ref, defer_ref);
}
}
}
resolve(val) {
var _a;
if (this.already_completed) return;
this.already_completed = true;
if (this.timeout) clearTimeout(this.timeout);
this.resolve_real(val);
(_a = this.deferred_map_ref) == null ? void 0 : _a.delete(this);
}
reject(val) {
var _a;
if (this.already_completed) return;
this.already_completed = true;
if (this.timeout) clearTimeout(this.timeout);
this.reject_real(val);
(_a = this.deferred_map_ref) == null ? void 0 : _a.delete(this);
}
};
// src/DeferredMap.class.ts
var DeferredMap = class {
constructor() {
this.defer_sets = /* @__PURE__ */ new Map();
this.default_resolve_value = -987;
this.default_reject_value = -876;
}
get size() {
return this.defer_sets.size;
}
deferred(autotimeout_ms) {
const deferred = new Deferred({
deferred_map_ref: this.defer_sets,
autotimeout_ms
});
this.defer_sets.set(deferred, deferred);
return deferred;
}
resolveAll(resolve_value) {
if (resolve_value === void 0) resolve_value = this.default_resolve_value;
for (const [key, value] of this.defer_sets) {
value.resolve(this.default_resolve_value);
}
this.defer_sets = /* @__PURE__ */ new Map();
}
rejectAll(reject_value) {
if (reject_value === void 0) reject_value = this.default_reject_value;
for (const [key, value] of this.defer_sets) {
value.reject(this.default_reject_value);
}
this.defer_sets = /* @__PURE__ */ new Map();
}
};
export {
Deferred,
DeferredMap
};