timeout.ts 385 B

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