| 12345678910111213141516171819202122232425 |
- export const supportsModernAbortSignal =
- typeof AbortSignal.any === 'function' &&
- typeof AbortSignal.timeout === 'function'
- export const signalWithTimeout = (signal: AbortSignal, timeout: number) => {
- if (supportsModernAbortSignal) {
- return AbortSignal.any([signal, AbortSignal.timeout(timeout)])
- }
- const abortController = new AbortController()
- const abort = () => {
- window.clearTimeout(timer)
- signal.removeEventListener('abort', abort)
- abortController.abort()
- }
- // abort after timeout has expired
- const timer = window.setTimeout(abort, timeout)
- // abort when the original signal is aborted
- signal.addEventListener('abort', abort)
- return abortController.signal
- }
|