13 lines
413 B
TypeScript
13 lines
413 B
TypeScript
export async function abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {
|
|
if (signal?.aborted) return;
|
|
await new Promise<void>((resolve) => {
|
|
const finish = () => {
|
|
clearTimeout(timer);
|
|
signal?.removeEventListener("abort", finish);
|
|
resolve();
|
|
};
|
|
const timer = setTimeout(finish, delayMs);
|
|
signal?.addEventListener("abort", finish, { once: true });
|
|
});
|
|
}
|