../20241108-retry-func-purify-ts

Retry function with purify-ts

async function retryP<L, R> (
  fn: () => Promise<Either<L, R>>,
  wait = 2000,
  retries = 2
): Promise<Either<L, R>> {
  const either = await fn();
  const retry = either.isLeft() && retries > 0;
  if (retry) {
    return new Promise(resolve => setTimeout(resolve, wait))
      .then(() => retryP(fn, wait, retries - 1));
  }
  return either;
}