26 lines
709 B
TypeScript
26 lines
709 B
TypeScript
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
|
|
}
|