pic-js-mops
Version:
An Internet Computer Protocol canister testing library for TypeScript and JavaScript.
31 lines (25 loc) • 656 B
text/typescript
export interface PollOptions {
intervalMs: number;
timeoutMs: number;
}
export async function poll<T extends (...args: any) => any>(
cb: T,
{ intervalMs, timeoutMs }: PollOptions,
): Promise<ReturnType<T>> {
const startTimeMs = Date.now();
return new Promise((resolve, reject) => {
async function runPoll(): Promise<void> {
const currentTimeMs = Date.now();
try {
const result = await cb();
return resolve(result);
} catch (e) {
if (currentTimeMs - startTimeMs >= timeoutMs) {
return reject(e);
}
setTimeout(runPoll, intervalMs);
}
}
runPoll();
});
}