import {sleep} from "./sleep.js"; /** * While promise t is not finished, call function `fn` per `interval` */ export async function callFnWhenAwait( p: Promise>, fn: () => void, interval: number ): Promise> { let t: NonNullable | undefined = undefined; const logFn = async (): Promise => { while (t === undefined) { await sleep(interval); if (t === undefined) fn(); } return undefined; }; t = await Promise.race([p, logFn()]); // should not happen since p doesn not resolve to undefined if (t === undefined) { throw new Error("Unexpected error: Timeout"); } return t; }