UNPKG

@opsimathically/deferred

Version:

Utility classes for working with the asynchronous deferral pattern.

83 lines (81 loc) 2.3 kB
// 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 };