pause-poll
Version:
Promisify setTimeout & setInterval
31 lines (30 loc) • 962 B
JavaScript
export const pause = (ms, cb, ...args) => {
let timeout;
const promise = new Promise((resolve, reject) => {
timeout = setTimeout(async () => {
try {
resolve(await cb?.(...args));
}
catch (error) {
reject(error);
}
}, ms);
});
promise.abort = () => clearTimeout(timeout);
return promise;
};
export const poll = async (interval, times, cb, ...args) => {
let result;
const resolve = value => (times = 0) || (result = value);
const reject = reason => (times = 0) || (result = Promise.reject(reason));
await (async function basePoll() {
if (times > 0) {
const _result = await cb?.(...args, resolve, reject);
if (times) {
result = _result;
--times && (await pause(interval, basePoll));
}
}
})();
return result;
};