Async Retry Fn
by Matthew Vasallo
JavaScript
const asyncRetryFn = (asyncFn, retryCount) => {
return new Promise((res, rej) => {
console.log("running asyncRetry", retryCount);
let successPromise = null;
let lastPromiseFinished = true;
let interval = null;
interval = setInterval(() => {
if (lastPromiseFinished) {
lastPromiseFinished = false;
asyncFn().then((res) => {
console.log("async fn success");
clearInterval(interval);
res(res);
}).catch(() => {
console.log("async fn rej");
if (retryCount === 0) {
clearInterval(interval);
rej("never completed");
}
retryCount--;
lastPromiseFinished = true;
});
} else {
console.log("last promise still pending");
}
}, 1000);
});
}
let failCount = 2;
const alwaysFailAsyncFn = () => {
console.log('running alwaysFail fn')
return new Promise((res, rej) => {
if (failCount > 0) {
failCount--;
rej("failing!");
} else {
failCount = 2
res("finally successful");
}
});
};
console.log('here');
asyncRetryFn(alwaysFailAsyncFn, 2);