UNPKG

softkave-js-utils

Version:

JavaScript & Typescript utility functions, types, and classes

55 lines 1.58 kB
import { isObjectEmpty } from '../object/isObjectEmpty.js'; import { getDeferredPromise } from './getDeferredPromise.js'; export const kConjoinedPromiseSettlementType = { /** Resolves when all the promises added to it are resolved, and rejects when * one of them is rejected. */ all: 'a', /** Resolves when all the promises added to it are resolved. */ allSettled: 's', }; /** Returns a promise that resolves when all the promises added to it are * resolved. */ export function getConjoinedPromise(params) { const p = getDeferredPromise(); const pMap = {}; let iteration = 0; let isStarted = false; const onSettled = (id) => { delete pMap[id]; if (isObjectEmpty(pMap) && isStarted) { p.resolve(); } }; const onRejected = (id, error) => { delete pMap[id]; if (isStarted) { p.reject(error); } }; const add = (p) => { const id = iteration++; pMap[id] = p; if (params.settlementType === kConjoinedPromiseSettlementType.all) { p.then(() => onSettled(id)).catch(error => onRejected(id, error)); } else { p.finally(() => onSettled(id)); } return p; }; const newDeferred = () => { const p = getDeferredPromise(); add(p.promise); return p; }; const start = () => { isStarted = true; }; return { add, newDeferred, start, deferredPromise: p, }; } //# sourceMappingURL=getConjoinedPromise.js.map