(promise: Promise<T>, signal: AbortSignal)
| 33 | } |
| 34 | |
| 35 | export function abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> { |
| 36 | if (signal.aborted) return Promise.reject(abortReason(signal)); |
| 37 | return new Promise<T>((resolve, reject) => { |
| 38 | const onAbort = () => { |
| 39 | reject(abortReason(signal)); |
| 40 | }; |
| 41 | signal.addEventListener('abort', onAbort, { once: true }); |
| 42 | promise.then(resolve, reject).finally(() => { |
| 43 | signal.removeEventListener('abort', onAbort); |
| 44 | }); |
| 45 | }); |
| 46 | } |
| 47 | |
| 48 | export function linkAbortSignal(source: AbortSignal, target: AbortController): () => void { |
| 49 | const onAbort = () => { |
no test coverage detected