client/packages/shared/src/asyncQueue.ts
Alois 69149b73bd
Some checks failed
/ build-web (push) Failing after 4m35s
/ build-desktop (linux) (push) Failing after 4m37s
/ build-mobile (push) Failing after 6m40s
/ release (push) Has been skipped
(feat): remove mtp loading screen
(fix): weird dedupe bugs
(qol): update todo
2026-07-03 21:49:13 +02:00

27 lines
580 B
TypeScript

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