|
7 | 7 | ExecutionRequest, |
8 | 8 | ExecutionResult, |
9 | 9 | isAsyncIterable, |
10 | | - MaybeAsyncIterable, |
11 | | - MaybePromise, |
| 10 | + isPromise, |
12 | 11 | registerAbortSignalListener, |
13 | 12 | } from '@graphql-tools/utils'; |
14 | 13 | import { GatewayPlugin } from '../types'; |
@@ -55,17 +54,24 @@ export function useUpstreamTimeout<TContext extends Record<string, any>>( |
55 | 54 | timeoutSignal, |
56 | 55 | ); |
57 | 56 | } |
58 | | - const timeoutDeferred = createDeferred<void>(); |
| 57 | + const signals: AbortSignal[] = []; |
| 58 | + signals.push(timeoutSignal); |
| 59 | + if (executionRequest.signal) { |
| 60 | + signals.push(executionRequest.signal); |
| 61 | + } |
| 62 | + const timeoutDeferred = createDeferred<ExecutionResult>(); |
59 | 63 | function rejectDeferred() { |
60 | 64 | timeoutDeferred.reject(timeoutSignal?.reason); |
61 | 65 | } |
62 | 66 | timeoutSignal.addEventListener('abort', rejectDeferred, { |
63 | 67 | once: true, |
64 | 68 | }); |
65 | | - const signals: AbortSignal[] = []; |
66 | | - signals.push(timeoutSignal); |
67 | | - if (executionRequest.signal) { |
68 | | - signals.push(executionRequest.signal); |
| 69 | + const res$ = executor({ |
| 70 | + ...executionRequest, |
| 71 | + signal: AbortSignal.any(signals), |
| 72 | + }); |
| 73 | + if (!isPromise(res$)) { |
| 74 | + return res$; |
69 | 75 | } |
70 | 76 | return Promise.race([ |
71 | 77 | timeoutDeferred.promise, |
@@ -102,12 +108,12 @@ export function useUpstreamTimeout<TContext extends Record<string, any>>( |
102 | 108 | throw e; |
103 | 109 | }) |
104 | 110 | .finally(() => { |
105 | | - timeoutDeferred.resolve(); |
| 111 | + timeoutDeferred.resolve(undefined as any); |
106 | 112 | timeoutSignal.removeEventListener('abort', rejectDeferred); |
107 | 113 | // Remove from the map after used so we don't see it again |
108 | 114 | errorExtensionsByExecRequest.delete(executionRequest); |
109 | 115 | timeoutSignalsByExecutionRequest.delete(executionRequest); |
110 | | - }) as MaybePromise<MaybeAsyncIterable<ExecutionResult>>; |
| 116 | + }); |
111 | 117 | }); |
112 | 118 | } |
113 | 119 | return undefined; |
|
0 commit comments