当前位置:首页 > 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实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…