2019-03-04 05:51:52 +07:00
|
|
|
import sleep from "./sleep";
|
|
|
|
|
|
|
|
export default function WaitUntil(
|
|
|
|
fn: () => Promise<boolean>, timeout: number = 15000,
|
2019-04-25 04:52:08 +07:00
|
|
|
interval: number = 1000, waitBefore: number = 0, waitAfter: number = 0): Promise<void> {
|
2019-03-04 05:51:52 +07:00
|
|
|
|
|
|
|
return new Promise(async (resolve, reject) => {
|
|
|
|
const timer = setTimeout(() => { throw new Error('Timeout') }, timeout);
|
2019-04-25 04:52:08 +07:00
|
|
|
if (waitBefore > 0)
|
|
|
|
await sleep(waitBefore);
|
2019-03-04 05:51:52 +07:00
|
|
|
while (true) {
|
|
|
|
try {
|
|
|
|
const res = await fn();
|
|
|
|
if (res && res === true) {
|
|
|
|
clearTimeout(timer);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
await sleep(interval);
|
|
|
|
} catch (err) {
|
|
|
|
console.error(err);
|
|
|
|
reject(err);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (waitAfter > 0)
|
|
|
|
await sleep(waitAfter);
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
}
|