UNPKG

979 BPlain TextView Raw
1import { AggregateError } from "./aggregate-error.js";
2
3export const isFulfilled = <T>(r: PromiseSettledResult<T>): r is PromiseFulfilledResult<T> => {
4 return r.status === 'fulfilled';
5}
6export const isRejected = <T>(r: PromiseSettledResult<T>): r is PromiseRejectedResult => {
7 return r.status === 'rejected';
8}
9
10/**
11 * Helper function that unwinds `Promise.allSettled`:
12 * Takes the promise returned and throws a `AggregateError` iff at least one promise settled with a rejection.
13 * Otherwise returns the list of fulfilled values.
14 * @param allSettledPromise A promise returned by `Promise.allSettled`
15 * @returns List of fulfilled values
16 */
17export const unsettle = async <T>(allSettledPromise: Promise<PromiseSettledResult<T>[]>): Promise<T[]> => {
18 const rs = await allSettledPromise;
19 if (rs.every(isFulfilled)) return rs.map(r => r.value)
20 throw new AggregateError(rs.filter(isRejected).map(r => r.reason), "One or more Promises in 'unsettle' were rejected");
21}