# retry 中文文档

规范地址：https://npmcn.com/package/retry/

版本：0\.13\.1
npm 元数据更新时间：2022-06-26T12:20:05.335Z
中文译文更新时间：2026-11-05T14:40:04.925Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/retry
原文对照：https://npmcn.com/package/retry/?lang=original
项目主页：https://github.com/tim-kos/node-retry
源码仓库：https://github.com/tim-kos/node-retry

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：18.9 kB，8 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>= 4
- 运行依赖：0 个
- 首次发布：2011-05-13T11:26:52.829Z
- 最新版本发布：2021-06-21T07:45:32.286Z
- 近 30 天下载量：475019343（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install retry
```

也可以使用：`pnpm add retry`、`yarn add retry`、`bun add retry`

## README

[![Build Status](https://secure.travis-ci.org/tim-kos/node-retry.svg?branch=master)](http://travis-ci.org/tim-kos/node-retry "Check this project's build status on TravisCI") [![codecov](https://codecov.io/gh/tim-kos/node-retry/branch/master/graph/badge.svg)](https://codecov.io/gh/tim-kos/node-retry)

# 重试

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

## 安装

```
npm install retry
```

## 当前状况

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

## 教学

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

```javascript
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 文件 . 当前尝试是一个表示迄今尝试次数的输入.

```javascript
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`编号: 是否 [未读](https://nodejs.org/api/timers.html#timers_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)
```

来看看 [本条](http://dthain.blogspot.com/2009/02/exponential-backoff-in-distributed.html) 对方法作出更好的解释.

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

![screenshot](https://github.com/tim-kos/node-retry/raw/master/equation.gif)

解释从左到右的各种值:

-   `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](http://www.wolframalpha.com/input/?i=Sum%5B1000*x%5Ek%2C+%7Bk%2C+0%2C+9%7D%5D+%3D+5+*+60+*+1000)

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

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

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

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

`retry.createTimeout()` 用于内部 `retry.timeouts()` 并且是公开的,以便您能够创建用于重新插入某个项的自己的超时程序 [问题13](https://github.com/tim-kos/node-retry/issues/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 移动 [未读](https://nodejs.org/api/timers.html#timers_unref) 设置 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号](https://github.com/tim-kos/node-retry/issues/10), (中文(简体) ), [12号](https://github.com/tim-kos/node-retry/issues/12),以及 [13号](https://github.com/tim-kos/node-retry/issues/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 是什么？

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

### 如何安装 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 和提交记录判断。

