This function helps you timeout your promises while keeping the TS types right.

await race(yourPromise, 1000); // resolves (or rejects) with the value of yourPromise or rejects with "Race: Timeout" message in a second
type Data = { a: number };
const myPromise = new Promise<Data>((resolve) => setTimeout(() => resolve({ a: 1 }), 2000));
const { a } = await race(myPromise, 1000); // You're allowed to destructure the result with TS
  • Type Parameters

    • T

    Parameters

    • promise: Promise<T>

      Your promise

    • timeout: number

      Time in milliseconds to wait for the promise to resolve

    • message: string = "Race: Timeout"

      Error message to use when the timeout is reached

    Returns Promise<T>