Abortable delay: resolves after `ms`, or rejects with AbortError if aborted.
(ms: number, signal?: AbortSignal)
| 754 | |
| 755 | /** Abortable delay: resolves after `ms`, or rejects with AbortError if aborted. */ |
| 756 | function delay(ms: number, signal?: AbortSignal): Promise<void> { |
| 757 | if (signal?.aborted) return Promise.reject(signalReason(signal)) |
| 758 | return new Promise<void>((resolve, reject) => { |
| 759 | const timer = setTimeout(() => { |
| 760 | signal?.removeEventListener('abort', onAbort) |
| 761 | resolve() |
| 762 | }, ms) |
| 763 | const onAbort = (): void => { |
| 764 | clearTimeout(timer) |
| 765 | reject(signalReason(signal)) |
| 766 | } |
| 767 | signal?.addEventListener('abort', onAbort, { once: true }) |
| 768 | }) |
| 769 | } |
| 770 | |
| 771 | function signalReason(signal: AbortSignal | undefined): Error { |
| 772 | const reason = signal?.reason |
no test coverage detected