UNPKG

@thumbmarkjs/thumbmarkjs

Version:

![GitHub package.json dynamic](https://img.shields.io/github/package-json/version/ilkkapeltola/thumbmarkjs) ![NPM Version](https://img.shields.io/npm/v/@thumbmarkjs/thumbmarkjs) ![NPM Downloads](https://img.shields.io/npm/dm/%40thumbmarkjs%2Fthumbmarkjs

45 lines (37 loc) 1.06 kB
import { componentInterface } from '../factory' type DelayedPromise<T> = Promise<T>; export function delay<T>(t: number, val: T): DelayedPromise<T> { return new Promise<T>((resolve) => { setTimeout(() => resolve(val), t); }); } export interface RaceResult<T> { value: T; elapsed?: number; } export function raceAllPerformance<T>( promises: Promise<T>[], timeoutTime: number, timeoutVal: T ): Promise<RaceResult<T>[]> { return Promise.all( promises.map((p) => { const startTime = performance.now(); return Promise.race([ p.then((value) => ({ value, elapsed: performance.now() - startTime, })), delay(timeoutTime, timeoutVal).then((value) => ({ value, elapsed: performance.now() - startTime, })), ]); }) ); } export function raceAll<T>(promises: Promise<T>[], timeoutTime: number, timeoutVal: T): Promise<(T | undefined)[]> { return Promise.all(promises.map((p) => { return Promise.race([p, delay(timeoutTime, timeoutVal)]); })); }