@lodestar/utils
Version:
Utilities required across multiple lodestar packages
21 lines • 778 B
JavaScript
import { anySignal } from "any-signal";
import { ErrorAborted, TimeoutError } from "./errors.js";
import { sleep } from "./sleep.js";
export async function withTimeout(asyncFn, timeoutMs, signal) {
if (signal?.aborted) {
throw new ErrorAborted();
}
const timeoutAbortController = new AbortController();
const timeoutAndParentSignal = anySignal([timeoutAbortController.signal, ...(signal ? [signal] : [])]);
async function timeoutPromise(signal) {
await sleep(timeoutMs, signal);
throw new TimeoutError();
}
try {
return await Promise.race([asyncFn(timeoutAndParentSignal), timeoutPromise(timeoutAndParentSignal)]);
}
finally {
timeoutAbortController.abort();
}
}
//# sourceMappingURL=timeout.js.map