Skip to content

Latest commit

 

History

History
53 lines (45 loc) · 1.26 KB

File metadata and controls

53 lines (45 loc) · 1.26 KB

Fetch

  • Retry the request if the response is not ok
type Fetcher = () => Promise<Response>;

export const retry = (fn: Fetcher, retriesLeft = 5, interval = 1000) => {
  return new Promise((resolve, reject) => {
    fn()
      .then((response) => {
        if (response.ok) return resolve(response);

        if (retriesLeft > 0) {
          setTimeout(() => {
            retry(fn, retriesLeft - 1, interval).then(resolve, reject);
          }, interval);
        } else {
          reject(new Error('Maximum retries exceeded'));
        }
      })
      .catch(reject);
  });
};
  • Retry the request if an error occurred
type Fetcher = () => Promise<Response>;

const checkStatus = (response: Response) => {
  if (response.ok) return response;
  throw new Error(response.status.toString());
};

export const retry = (fn: Fetcher, retriesLeft = 5, interval = 1000) => {
  return new Promise((resolve, reject) => {
    fn()
      .then(checkStatus)
      .then(resolve)
      .catch((error) => {
        if (retriesLeft > 0) {
          setTimeout(() => {
            retry(fn, retriesLeft - 1, interval).then(resolve, reject);
          }, interval);
        } else {
          reject(new Error('Maximum retries exceeded'));
        }
      });
  });
};