当前位置:首页 > JavaScript

js retry 实现

2026-03-13 16:30:00JavaScript

实现 JavaScript 重试机制的几种方法

使用递归实现重试

通过递归函数可以在失败时重新调用自身,直到达到最大重试次数或成功为止。

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

使用循环实现重试

通过循环和async/await可以更直观地实现重试逻辑。

js retry 实现

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

带指数退避的重试

指数退避算法可以在每次重试时增加延迟时间,避免短时间内频繁重试。

js retry 实现

async function retryWithBackoff(operation, maxRetries, initialDelay) {
  let currentDelay = initialDelay;
  let lastError;

  for (let i = 0; i < maxRetries; i++) {
    try {
      const result = await operation();
      return result;
    } catch (error) {
      lastError = error;
      await new Promise(resolve => setTimeout(resolve, currentDelay));
      currentDelay *= 2;
    }
  }
  throw lastError;
}

使用现成库实现

许多现成的JavaScript库提供了重试功能,如async-retryp-retry

使用p-retry示例:

const pRetry = require('p-retry');

async function run() {
  return pRetry(async () => {
    const result = await fetch('https://example.com');
    return result;
  }, {
    retries: 5,
    onFailedAttempt: error => {
      console.log(`Attempt ${error.attemptNumber} failed.`);
    }
  });
}

重试策略的最佳实践

  • 设置合理的最大重试次数,避免无限重试
  • 考虑添加延迟,特别是对API调用
  • 对于非幂等操作要谨慎使用重试
  • 记录重试次数和失败原因有助于调试
  • 对于特定错误类型可能需要不同的重试策略

标签: jsretry
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…