async function wait(timeoutMs: number, value: any = null): Promise { return new Promise((resolve) => { setTimeout(() => resolve(value), timeoutMs); }); } async function forTrue(fn: () => boolean) { let count = 0; return new Promise((resolve, reject) => { if (fn()) { resolve(true); return; } const interval = setInterval(() => { count++; if (fn()) { clearInterval(interval); resolve(true); return; } if (count >= 200) reject(); }, 50); }); } function timeoutAfter(timeoutMs: number, errorText: string) { return new Promise((_, reject) => { setTimeout(() => { reject(new Error(errorText)); }, timeoutMs); }); } const WaitUtil = { wait, forTrue, timeoutAfter, }; export default WaitUtil;