(timeout: number, defaultValue: T, ...promises: Promise<T>[])
| 45 | export function raceTimeout<T>(timeout: number, ...promises: Promise<T>[]): Promise<T | undefined>; |
| 46 | export function raceTimeout<T>(timeout: number, defaultValue: T, ...promises: Promise<T>[]): Promise<T>; |
| 47 | export function raceTimeout<T>(timeout: number, defaultValue: T, ...promises: Promise<T>[]): Promise<T> { |
| 48 | const resolveValue = isPromiseLike(defaultValue) ? undefined : defaultValue; |
| 49 | if (isPromiseLike(defaultValue)) { |
| 50 | promises.push(defaultValue as unknown as Promise<T>); |
| 51 | } |
| 52 | |
| 53 | let promiseResolve: ((value: T) => void) | undefined = undefined; |
| 54 | |
| 55 | const timer = setTimeout(() => promiseResolve?.(resolveValue as unknown as T), timeout); |
| 56 | |
| 57 | return Promise.race([ |
| 58 | Promise.race(promises).finally(() => clearTimeout(timer)), |
| 59 | new Promise<T>((resolve) => (promiseResolve = resolve)) |
| 60 | ]); |
| 61 | } |
| 62 | |
| 63 | export function raceTimeoutError<T>(timeout: number, error: Error, ...promises: Promise<T>[]): Promise<T> { |
| 64 | let promiseReject: ((value: unknown) => void) | undefined = undefined; |
no test coverage detected