UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

53 lines 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbortablePromise = void 0; /** * Loosely based on https://gist.github.com/andrewcourtice/ef1b8f14935b409cfe94901558ba5594 */ class AbortablePromise extends Promise { constructor(executor, options) { const abortSignal = options?.signal; if (abortSignal) { abortSignal.throwIfAborted(); } super((_resolve, _reject) => { if (abortSignal) { const { saveResolve, saveReject, onAbort } = AbortablePromise.registerHandler(_resolve, _reject, abortSignal); executor(saveResolve, saveReject, onAbort); } else { executor(_resolve, _reject); } }); } static registerHandler(resolve, reject, abortSignal) { let abortCallback = (reason) => { }; let abortHandler = (reason) => { }; const onAbort = (_abortCallback) => { abortCallback = _abortCallback; }; const cleanup = () => { abortSignal.removeEventListener('abort', abortHandler); }; const saveResolve = AbortablePromise.wrapWithFinal(resolve, cleanup); const saveReject = AbortablePromise.wrapWithFinal(reject, cleanup); abortHandler = (reason) => { abortCallback(reason); saveReject(reason); }; abortSignal.addEventListener('abort', abortHandler, { once: true }); return { saveResolve: saveResolve, saveReject: saveReject, onAbort: onAbort }; } static wrapWithFinal(callee, final) { return (...args) => { try { return callee(...args); } finally { final(); } }; } } exports.AbortablePromise = AbortablePromise; //# sourceMappingURL=AbortablePromise.js.map