(promise: Promise<T>, ms: number, label?: string)
| 1 | export function withTimeout<T>(promise: Promise<T>, ms: number, label?: string): Promise<T> { |
| 2 | let timeout: NodeJS.Timeout |
| 3 | return Promise.race([ |
| 4 | promise.finally(() => { |
| 5 | clearTimeout(timeout) |
| 6 | }), |
| 7 | new Promise<never>((_, reject) => { |
| 8 | timeout = setTimeout(() => { |
| 9 | reject(new Error(label ?? `Operation timed out after ${ms}ms`)) |
| 10 | }, ms) |
| 11 | }), |
| 12 | ]) |
| 13 | } |