@ew-did-registry/did-ipfs-store
Version:
IPFS-based implementation of IDidStore
38 lines (35 loc) • 1.11 kB
text/typescript
const DEFAULT_WAIT_FOR_INTERVAL = 1000;
/**
* @description asynchronously waits for fulfillment of given condition. Throws error if condition wasn't fulfilled in time
*
* @param condition asynchronous funtion which resolves to boolean
* @param opts.timeout time to wait until `condition` is met, in seconds
* @param opts.interval interval between `condition` checking attempts, in seconds
* @returns
*/
export const waitFor = async (
condition: () => Promise<boolean>,
opts: { timeout: number; interval?: number }
) => {
const { timeout, interval = DEFAULT_WAIT_FOR_INTERVAL } = opts;
return new Promise<void>((resolve, reject) => {
let elapsedTime = 0;
const scheduleNextCheck = () =>
setTimeout(async () => {
elapsedTime += interval;
try {
if (await condition()) {
resolve();
} else {
if (elapsedTime > timeout) {
reject();
}
scheduleNextCheck();
}
} catch (_) {
scheduleNextCheck();
}
}, interval);
scheduleNextCheck();
});
};