UNPKG

@xylabs/forget

Version:

Base functionality used throughout XY Labs TypeScript/JavaScript libraries

71 lines 1.91 kB
// src/forget.ts import { delay } from "@xylabs/delay"; import { isPromise } from "@xylabs/promise"; var ForgetPromise = { get active() { return this.activeForgets > 0; }, activeForgets: 0, async awaitInactive(interval = 100, timeout) { let timeoutRemaining = timeout; while (this.active) { await delay(interval); if (timeoutRemaining !== void 0) { timeoutRemaining -= interval; if (timeoutRemaining <= 0) { return this.activeForgets; } } } return 0; }, /** * Used to explicitly launch an async function (or Promise) with awaiting it * @param promise The promise to forget * @param config Configuration of forget settings */ forget(promise, onComplete, config) { if (isPromise(promise)) { let completed = false; this.activeForgets++; const promiseWrapper = async () => { await promise.then((result) => { this.activeForgets--; completed = true; onComplete?.([result, void 0]); }).catch((error) => { this.activeForgets--; completed = true; onComplete?.([void 0, error]); }); }; const promises = [promiseWrapper()]; if (config) { const timeoutFunc = async () => { await delay(config.delay); if (!completed) { console.log(`forget promise timeout out after ${config.delay}ms [Cancelling]`); config.cancel?.(); } }; promises.push(timeoutFunc()); } const all = Promise.race(promises); all.then(() => { return; }).catch(() => { return; }); } else { return promise(); } } }; var forget = (promise, onComplete, timeout) => { ForgetPromise.forget(promise, onComplete, timeout); }; export { ForgetPromise, forget }; //# sourceMappingURL=index.mjs.map