(
promise: Promise<T>,
{ signal }: { signal?: AbortSignal }
)
| 1433 | * @param options - An options object carrying an optional signal |
| 1434 | */ |
| 1435 | export async function abortable<T>( |
| 1436 | promise: Promise<T>, |
| 1437 | { signal }: { signal?: AbortSignal } |
| 1438 | ): Promise<T> { |
| 1439 | if (signal == null) { |
| 1440 | return await promise; |
| 1441 | } |
| 1442 | |
| 1443 | const { promise: aborted, reject } = promiseWithResolvers<never>(); |
| 1444 | |
| 1445 | const abortListener = signal.aborted |
| 1446 | ? reject(signal.reason) |
| 1447 | : addAbortListener(signal, function () { |
| 1448 | reject(this.reason); |
| 1449 | }); |
| 1450 | |
| 1451 | try { |
| 1452 | return await Promise.race([promise, aborted]); |
| 1453 | } finally { |
| 1454 | abortListener?.[kDispose](); |
| 1455 | } |
| 1456 | } |
no test coverage detected