export default function createAsyncQueue() { let resolve!: (value: T) => void; const promise = new Promise((r) => { resolve = r; }); return { set: resolve, get: () => promise, }; } // eslint-disable-next-line type AnyFn = (...args: any[]) => any; export function createQueuedFunc( getFn: () => F | null | undefined, ) { return (async (...args: Parameters): Promise>> => { while (!getFn()) { await new Promise((r) => setTimeout(r, 50)); } return await getFn()!(...args); }) as F; }