All files / function/src delay.ts

100% Statements 5/5
100% Branches 0/0
100% Functions 3/3
100% Lines 3/3

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 35 36 37 38 39                                                          2x         2x   2x    
import { Callback, CancelCallback } from "./_types";
 
/**
 * Delays the invocation of a {@link Callback} function.
 *
 * @example
 * Call `callback` after 500ms
 * ```ts
 * const callback = (val) => console.log(val);
 * delay(callback, 500, "val");
 *
 * // prints "val" after 500ms
 * ```
 *
 * @example
 * Cancel delay
 * ```ts
 * const callback = (val) => console.log(val);
 * const cancelDelay = delay(callback, 500, "val");
 * cancelDelay();
 *
 * // will not call the callback
 * ```
 *
 * @param callback - the {@link Callback} to call
 * @param ms - the {@link number} of milliseconds to delay the function call
 * @param args - the `arguments` to pass to the `callback` function
 * @returns the cancel {@link Callback} function
 */
export const delay = <TArgs extends unknown[] = []>(
  callback: Callback<TArgs>,
  ms: number,
  ...args: TArgs
): CancelCallback => {
  const timeout = setTimeout(callback, ms, ...args);
 
  return () => clearTimeout(timeout);
};