murashit_codex-panel/tests/support/async.ts

27 lines
670 B
TypeScript

export interface Deferred<T> {
promise: Promise<T>;
resolve: (value: T) => void;
reject: (error: unknown) => void;
}
export function deferred<T>(): Deferred<T> {
let resolve!: (value: T) => void;
let reject!: (error: unknown) => void;
const promise = new Promise<T>((promiseResolve, promiseReject) => {
resolve = promiseResolve;
reject = promiseReject;
});
return { promise, resolve, reject };
}
export async function waitForAsyncWork(assertion: () => void): Promise<void> {
for (let attempt = 0; attempt < 20; attempt += 1) {
try {
assertion();
return;
} catch {
await Promise.resolve();
}
}
assertion();
}