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);