🌳
pt0/sharedF/sleepF.mts
1export const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))
3export const withTimeout = <T,>(promise: Promise<T>, ms: number): Promise<T> =>
4 Promise.race([
5 promise,
6 new Promise<never>((_, reject) => setTimeout(() => reject(new Error(`withTimeout ${ms}ms`)), ms)),
7 ])
9export const pollUntil = async (checkFn: () => Promise<boolean> | boolean, {timeoutMs = 60000, intervalMs = 500} = {}) => {
10 const startTime = Date.now()
11 while (Date.now() - startTime < timeoutMs) {
12 if (await checkFn()) return true
13 await sleep(intervalMs)
14 }
15 return false