当前位置:首页 > JavaScript

js实现retry

2026-03-13 16:56:05JavaScript

实现重试机制的几种方法

在JavaScript中实现重试机制可以通过多种方式完成,以下是几种常见的实现方法:

使用递归函数实现重试

function retryOperation(operation, maxRetries, delay) {
  return new Promise((resolve, reject) => {
    function attempt(retryCount) {
      operation()
        .then(resolve)
        .catch(error => {
          if (retryCount >= maxRetries) {
            reject(error);
          } else {
            setTimeout(() => attempt(retryCount + 1), delay);
          }
        });
    }
    attempt(0);
  });
}

使用async/await实现重试

js实现retry

async function retryAsyncOperation(operation, maxRetries, delay) {
  let lastError;
  for (let i = 0; i < maxRetries; i++) {
    try {
      const result = await operation();
      return result;
    } catch (error) {
      lastError = error;
      if (i < maxRetries - 1) {
        await new Promise(resolve => setTimeout(resolve, delay));
      }
    }
  }
  throw lastError;
}

使用第三方库实现重试

多个流行库提供了内置的重试功能:

js实现retry

  • axios-retry:为axios请求添加重试功能
  • p-retry:为Promise操作提供重试功能
  • async-retry:简单易用的异步重试库

指数退避策略实现

function exponentialBackoff(operation, maxRetries, initialDelay) {
  return new Promise((resolve, reject) => {
    function attempt(retryCount) {
      operation()
        .then(resolve)
        .catch(error => {
          if (retryCount >= maxRetries) {
            reject(error);
          } else {
            const delay = initialDelay * Math.pow(2, retryCount);
            setTimeout(() => attempt(retryCount + 1), delay);
          }
        });
    }
    attempt(0);
  });
}

带条件判断的重试实现

function conditionalRetry(operation, shouldRetry, maxRetries, delay) {
  return new Promise((resolve, reject) => {
    function attempt(retryCount) {
      operation()
        .then(resolve)
        .catch(error => {
          if (retryCount >= maxRetries || !shouldRetry(error)) {
            reject(error);
          } else {
            setTimeout(() => attempt(retryCount + 1), delay);
          }
        });
    }
    attempt(0);
  });
}

每种实现方法适用于不同场景,选择哪种取决于具体需求。递归方法适合简单场景,async/await版本更易读,第三方库可以减少重复代码,指数退避适合网络请求,条件重试提供了更灵活的控制。

标签: jsretry
分享给朋友:

相关文章

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…