|
1 | | -const createAbortError = () => |
2 | | - new DOMException('The operation was aborted', 'AbortError'); |
3 | | - |
4 | 1 | export const getTimeoutSignal = (timeout: number): AbortSignal => { |
5 | | - const controller = new AbortController(); |
6 | | - const timeoutId = setTimeout(() => controller.abort(createAbortError()), timeout); |
7 | | - timeoutId.unref?.(); |
8 | | - |
9 | | - controller.signal.addEventListener( |
10 | | - 'abort', |
11 | | - () => { |
12 | | - clearTimeout(timeoutId); |
13 | | - }, |
14 | | - { once: true } |
15 | | - ); |
16 | | - |
17 | | - return controller.signal; |
| 2 | + return AbortSignal.timeout(timeout); |
18 | 3 | }; |
19 | 4 |
|
20 | 5 | export const raceAbortSignals = (signals: AbortSignal[]): AbortSignal => { |
21 | | - const controller = new AbortController(); |
22 | | - |
23 | 6 | if (signals.length === 0) { |
24 | | - return controller.signal; |
25 | | - } |
26 | | - |
27 | | - const cleanupCallbacks: Array<() => void> = []; |
28 | | - |
29 | | - const cleanup = () => { |
30 | | - while (cleanupCallbacks.length > 0) { |
31 | | - cleanupCallbacks.pop()?.(); |
32 | | - } |
33 | | - }; |
34 | | - |
35 | | - const abortWithSignal = (signal: AbortSignal) => { |
36 | | - cleanup(); |
37 | | - controller.abort(signal.reason ?? createAbortError()); |
38 | | - }; |
39 | | - |
40 | | - for (const signal of signals) { |
41 | | - if (signal.aborted) { |
42 | | - abortWithSignal(signal); |
43 | | - return controller.signal; |
44 | | - } |
45 | | - |
46 | | - const onAbort = () => abortWithSignal(signal); |
47 | | - signal.addEventListener('abort', onAbort, { once: true }); |
48 | | - cleanupCallbacks.push(() => signal.removeEventListener('abort', onAbort)); |
| 7 | + return new AbortController().signal; |
49 | 8 | } |
50 | | - |
51 | | - controller.signal.addEventListener('abort', cleanup, { once: true }); |
52 | | - |
53 | | - return controller.signal; |
| 9 | + return AbortSignal.any(signals); |
54 | 10 | }; |
55 | 11 |
|
56 | 12 | export const withAbortTimeout = ( |
|
0 commit comments