源码
packages/ai/src/utils/abort.ts
/** Cancel a caller's wait without discarding shared work such as a rotating credential refresh. */
export async function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {
if (!signal) return promise;
let abort!: () => void;
try {
return await Promise.race([
promise,
new Promise<never>((_, reject) => {
abort = () => reject(signal.reason ?? new DOMException("Request aborted", "AbortError"));
if (signal.aborted) abort();
else signal.addEventListener("abort", abort, { once: true });
}),
]);
} finally {
signal.removeEventListener("abort", abort);
}
}