Z ZPI 文档 v0.3.8
介绍页

源码

packages/ai/src/utils/abort.ts

typescript18 行查看原文
/** 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);
  }
}