每日一题

请封装一个请求函数,要求最多自动重试n次后,任意一次请求成功后就直接返回结果

  • 简洁版
async function requestWithRetry(url, maxRetries) {
      let retries = 0;
      let lastError = null;

      while (retries < maxRetries) {
        try {
          const response = await fetch(url);
          const data = await response.json();
          return data;
        } catch (error) {
          lastError = error;
          retries++;
        }
      }

      throw lastError; 
    }

保证一些健壮性,咋们做一些补充能力。

  • 以下是一个简单的 JavaScript 请求函数,它具有自动重试的功能。函数使用 fetch API,你可以根据需要替换成其他的请求库。
async function retryableFetch(url, maxRetries = 3) {
  let retries = 0;

  while (retries < maxRetries) {
    try {
      const response = await fetch(url);
      if (response.ok) {
        return response.json(); // 返回 JSON 数据,你可以根据需要调整
      }
    } catch (error) {
      console.error(`Request failed, retrying (${retries + 1}/${maxRetries})`, error);
    }

    retries++;
  }

  throw new Error(`Failed to fetch after ${maxRetries} retries`);
}

// 使用示例
const url = 'https://jsonplaceholder.typicode.com/todos/1';
retryableFetch(url)
  .then(data => console.log(data))
  .catch(error => console.error(error));

这个函数会在请求失败时进行重试,最多重试 maxRetries 次。如果请求成功,它会解析 JSON 数据并返回,否则在达到最大重试次数后抛出一个错误。

请注意,这只是一个基本的示例,实际场景中你可能需要根据你的需求进行更多的定制。此外,还要考虑一些边缘情况,比如请求超时、网络错误等。