(promise: Promise<T>, ms: number, message: string)
| 142 | } |
| 143 | |
| 144 | function withTimeout<T>(promise: Promise<T>, ms: number, message: string): Promise<T> { |
| 145 | let timer: ReturnType<typeof setTimeout> | undefined |
| 146 | const cap = new Promise<never>((_, reject) => { |
| 147 | timer = setTimeout(() => reject(new Error(message)), ms) |
| 148 | timer.unref?.() |
| 149 | }) |
| 150 | return Promise.race([promise, cap]).finally(() => { |
| 151 | if (timer) clearTimeout(timer) |
| 152 | }) as Promise<T> |
| 153 | } |
no test coverage detected