All files / src/promises delay.ts

100% Statements 7/7
100% Branches 4/4
100% Functions 3/3
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 351x                             5x 1x     4x   4x                          
let fallbackDelay = 500;
 
/**
 * If requests resolve instantly it can lead to users feeling like nothing *really* happened.
 * This just ensures a request always takes a *little* bit of time so that spinners and what not can appear.
 *
 * @param promise The promise to return upon resolving
 * @param ms The time to wait
 * @returns A promise that resolves based on the time specified
 */
export async function delay(): Promise<void>;
export async function delay(ms: number): Promise<void>;
export async function delay<T>(promise: Promise<T>): Promise<T>;
export async function delay<T>(promise: Promise<T>, ms: number): Promise<T>;
export async function delay<T>(promise?: Promise<T> | number, ms?: number): Promise<T | void> {
  if (typeof promise === 'number') {
    return await new Promise((resolve) => setTimeout(resolve, promise));
  }
 
  const [result] = await Promise.all([promise, new Promise((resolve) => setTimeout(resolve, ms ?? fallbackDelay))]);
 
  return result;
}
 
/* c8 ignore start */
export namespace delay {
  /* c8 ignore end */
  /**
   * Overrides the default delay value
   */
  export function fallback(delay: number) {
    fallbackDelay = delay;
  }
}