Forked from lmstudio/openai-compat-endpoint
Forked from lmstudio/openai-compat-endpoint
src / abort.ts
export async function withAbort<T>(operation: Promise<T>, signal: AbortSignal): Promise<T> {
let onAbort: () => void = () => {};
const aborted = new Promise<never>((_resolve, reject) => {
onAbort = () => reject(signal.reason);
if (signal.aborted) onAbort();
else signal.addEventListener("abort", onAbort, { once: true });
});
try {
const result = await Promise.race([operation, aborted]);
signal.throwIfAborted();
return result;
} finally {
signal.removeEventListener("abort", onAbort);
}
}
src / abort.ts
export async function withAbort<T>(operation: Promise<T>, signal: AbortSignal): Promise<T> {
let onAbort: () => void = () => {};
const aborted = new Promise<never>((_resolve, reject) => {
onAbort = () => reject(signal.reason);
if (signal.aborted) onAbort();
else signal.addEventListener("abort", onAbort, { once: true });
});
try {
const result = await Promise.race([operation, aborted]);
signal.throwIfAborted();
return result;
} finally {
signal.removeEventListener("abort", onAbort);
}
}