retry

中文文档
0.13.1发布于 2021/06/21MITCommonJS零依赖近 30 天下载 4.8亿

对失败操作的指数策略和自定义策略进行总结 .

中文使用文档
文档目录10 节
  1. 安装
  2. 当前状况
  3. 教学
  4. API 密码
  5. retry. expert ([选项])
  6. retry.timeout([选项]) 重试
  7. 重新尝试. 创建 Timeout( 尝试, 选择)
  8. retry. wrap(obj, [选项], [方法名])
  9. 新建重试操作( 超时, [选项])
  10. 许可证

Build Status codecov

重试

对失败操作的指数策略和自定义策略进行总结 .

安装

npm install retry

当前状况

该模块已经测试完毕,准备使用.

教学

下面的例子将重试一个潜在的失败 dns.resolve 操作 10 使用指数式后退策略。 默认设置中, 此 表示最后一次尝试是在 17 minutes and 3 seconds。 。 。 .

var dns = require('dns');
var retry = require('retry');

function faultTolerantResolve(address, cb) {
  var operation = retry.operation();

  operation.attempt(function(currentAttempt) {
    dns.resolve(address, function(err, addresses) {
      if (operation.retry(err)) {
        return;
      }

      cb(err ? operation.mainError() : null, addresses);
    });
  });
}

faultTolerantResolve('nodejs.org', function(err, addresses) {
  console.log(err, addresses);
});

当然,你也可以配置进入指数化的因素 备份。 关于所有可用的设置, 请参看下面的 API 文件 . 当前尝试是一个表示迄今尝试次数的输入.

var operation = retry.operation({
  retries: 5,
  factor: 3,
  minTimeout: 1 * 1000,
  maxTimeout: 60 * 1000,
  randomize: true,
});

API 密码

retry. expert ([选项])

创建新 RetryOperation 对象. options 与 retry.timeouts()是因为 options,加上三个补充:

  • forever: 是否永远重试,默认为 false。 。 。 .
  • unref编号: 是否 未读 设置 Timeout 的,默认为 false。 。 。 .
  • maxRetryTime:允许再试操作运行的最大时间(以毫秒计). 默认是 Infinity。 。 。 .

retry.timeout([选项]) 重试

返回超时数组 。 永远 options 返回值为 毫秒长. 若为 options 是数组,返回该数组的副本.

options 可包含以下任一密钥的联署材料对象:

  • retries:重试操作的最大次数. 默认是 10设置此选项 1 表示 do it once, then retry it once。 。 。 .
  • factor:要使用的指数系数。 默认是 2。 。 。 .
  • minTimeout:第一次重试开始前的毫秒数. 默认是 1000。 。 。 .
  • maxTimeout:两个回转间的最大毫秒数. 默认是 Infinity。 。 。 .
  • randomize:通过乘以因数在 1 改为 2默认为 false。 。 。 .

用于计算单个超时的公式是:

Math.min(random * minTimeout * Math.pow(factor, attempt), maxTimeout)

来看看 本条 对方法作出更好的解释.

如果你想调谐你的 factor 编号 : times 尝试上次重试的设置 一段时间后,可以使用wolfram alpha. 例如顺序 调用 10 尝试 5 minutes您可以使用此等式 :

screenshot

解释从左到右的各种值:

  • k = 0 ... 9编号: retries 价值(10)
  • 1000编号: minTimeout 数值(1 000)
  • x^k:没有必要改变这一点, x 将会成为你的因子
  • 5 * 60 * 1000: 以毫秒( 5分钟) 重试所需时间总数

为了让你更容易一点,使用wolfram alpha来进行计算:

http://www.wolframalpha.com/input/?i=sum%5B1000*x^k%2C+{%2C+0%2C+9}%5D+%3D+5+*+60+*+1000

重新尝试. 创建 Timeout( 尝试, 选择)

返回一个新的 timeout (整数以毫秒为单位)基于给定参数.

attempt 是代表一个整数,为此应重新计算超时。 如果你的重试操作被执行4次 你有一个尝试和3次重试。 如果您想要计算新的超时, 请设置 attempt 至 4(尝试为零索引).

opts 可包含 factor, (中文(简体) ), minTimeout, (中文(简体) ), randomize (布尔)和 maxTimeout. 以上记录.

retry.createTimeout() 用于内部 retry.timeouts() 并且是公开的,以便您能够创建用于重新插入某个项的自己的超时程序 问题13。 。 。 .

retry. wrap(obj, [选项], [方法名])

环绕 obj 与重试。 您可以选择通过操作选项和 需要被包裹的一系列方法名称.

retry.wrap(obj)

retry.wrap(obj, ['method1', 'method2'])

retry.wrap(obj, {retries: 3})

retry.wrap(obj, {retries: 3}, ['method1', 'method2'])

这个 options 对象可以选择通常调用到的任何选项 retry.operation 能摄取.

新建重试操作( 超时, [选项])

创建新 RetryOperation 地点 timeouts 是每个值所在的数组 以毫秒计的超时.

可用的选项 :

  • forever: 是否永远重试,默认为 false。 。 。 .
  • unref: 向 Wether 移动 未读 设置 Timeout 的,默认为 false。 。 。 .

若为 forever 真实的,会发生以下变化:

  • RetryOperation.errors() 将只输出一个项的数组:最后一个错误.
  • RetryOperation 将重复使用 timeouts 阵列。 一旦其全部超时被用完后,会以第一次超时重启,再使用第二次等.

重试操作. errors ()

返回已传递到的所有错误的数组 retryOperation.retry() 目前为止 这个 返回数组中,有按时间顺序排列的错误被传送到 retryOperation.retry(),这意味着第一个通过的错误是指数零,最后一个是 在最后一个索引.

重试操作。 mainError ()

引用最频繁发生的错误对象 。 错误是 比较使用 error.message 属性.

如果多个错误消息发生时间相同, 则最后一个错误 返回带有该消息的对象.

如果迄今为止没有出错,则值是 null。 。 。 .

重试操作. attoption( fn, 超时) Ops

定义函数 fn 即是重审后执行 时间马上。 这个 fn 函数可以接收可选 currentAttempt 表示执行尝试次数的回调 fn 目前为止.

可选定义 timeoutOps 具有财产的物体 timeout 单位:毫秒和财产 cb 调用函数 . 当你的重试操作需要时间超过 timeout 要执行的超时调用功能 cb 名为.

重试操作. try( fn)

这是一个别名,用于 retryOperation.attempt(fn). 这是堕落的。 请使用 retryOperation.attempt(fn) 换句话说.

重试操作. sart( fn)

这是一个别名,用于 retryOperation.attempt(fn). 这是堕落的。 请使用 retryOperation.attempt(fn) 换句话说.

重试操作. retry( 错误)

回返 false 否时 error 值,或重试的最大次数 已经达到.

否则它会回来 true,并在超时后重试操作 当前尝试编号.

重试操作. stop ()

允许您停止重试操作 。 用于在致命错误等情况下中止操作 .

重试操作. reset ()

重置操作对象的内部状态,以便您可以调用 attempt() ,它再次成为新的操作对象.

重试操作. atters ()

返回一个表示需要调用的次数的英寸 fn 在它获得成功之前.

许可证

重新试验根据麻省理工学院的许可证颁发.

更改日志

0:0.0 添加 stop 函数,多亏了@maxnachlinger.

0.9.0 添加 unref 函数,感谢@satazor.

实施重试. wrap.

0.7.0 一些错误修正并重试.createtimout() public. 固定问题 10号, (中文(简体) ), 12号,以及 13号。 。 。 .

0.6.0 为尝试()函数引入了可选时间Ops参数,该函数是一个以毫秒计的属性超时和属性 cb 调用函数的对象。 每次重试操作需要超过超时执行时,都会调用超时调用函数 cb.

0.5.0 一些小的重构.

0.4.0 更改了重试 Operation.try( ) 为重试 Operation. attrep () 。 贬去别名开始( ) 为它尝试( ) .

0.3.0 添加再试 Operation. start () 是再试 Operation.try () 的同名词.

0.2.0 添加尝试 () 函数和参数以重试 Operation.try () , 表示调用 fn () 的尝试次数 .

版本与发布记录

retry 共发布 15 个版本,首次发布于 2011/05/13;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.13.1latest2021/06/215 年前
0.12.02018/04/098 年前
0.10.12016/12/129 年前
0.10.02016/08/2010 年前
0.9.02016/01/2610 年前
0.8.02015/09/1711 年前

关于 retry 的常见问题

retry 是什么?

对失败操作的指数策略和自定义策略进行总结 .

如何安装 retry?

在项目目录运行 npm install retry,或使用 pnpm add / yarn add / bun add。

retry 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/retry 是否存在。

retry 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

retry 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 4。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

retry 可以商用吗?

retry 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

retry 的下载量有多少?

根据 npm 官方下载统计,retry 在 2026/10/05 – 2026/11/03 这 30 天内被下载 475,019,343 次,日均约 15,833,978 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

retry 还在维护吗?

最新版本 0.13.1 发布于 2021/06/21(5 年前);至今共发布 15 个版本,其中过去 12 个月发布了 0 个;首次发布于 2011/05/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。