aboutsummaryrefslogtreecommitdiff
path: root/src/util/time.ts
blob: ae751f8650a0859b30ba0b837275754dfb467d14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export const sleep = (ms: number, signal?: AbortSignal): Promise<void> =>
  new Promise((resolve, reject) => {
    if (signal?.aborted) {
      reject(signal.reason ?? new Error("aborted"));
      return;
    }
    const onAbort = (): void => {
      clearTimeout(timer);
      reject(signal?.reason ?? new Error("aborted"));
    };
    const timer = setTimeout(() => {
      signal?.removeEventListener("abort", onAbort);
      resolve();
    }, ms);
    signal?.addEventListener("abort", onAbort, { once: true });
  });