# @adobe/node-fetch-retry 中文文档

规范地址：https://npmcn.com/package/%40adobe/node-fetch-retry/

版本：2\.2\.0
npm 元数据更新时间：2026-10-01T01:34:37.101Z
中文译文更新时间：2026-11-05T19:25:37.335Z
软件包许可：Apache-2\.0

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

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

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

- 包体积（解压后）：36.8 kB，8 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2020-04-23T21:03:08.975Z
- 最新版本发布：2022-03-08T01:01:23.123Z
- 近 30 天下载量：38979（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：12（近 12 个月 0 个）

## 中文简介

执行 HTTP 请求重试的库

## 安装

```sh
npm install @adobe/node-fetch-retry
```

也可以使用：`pnpm add @adobe/node-fetch-retry`、`yarn add @adobe/node-fetch-retry`、`bun add @adobe/node-fetch-retry`

## README

[![Version](https://img.shields.io/npm/v/@adobe/node-fetch-retry.svg)](https://npmjs.org/package/@adobe/node-fetch-retry) [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0) [![Travis](https://travis-ci.com/adobe/node-fetch-retry.svg?branch=master)](https://travis-ci.com/adobe/node-fetch-retry)

# 节点重复

为 HTTP 请求执行重试的节点模块 .

它是一个包裹周围 [`node-fetch`](https://github.com/node-fetch/node-fetch) 图书馆。 它有如下所描述的默认重试逻辑以及可配置参数. 它还对Apache OpenWhisk动作进行了内置支持,调整了超时以反映动作超时.

## 安装

```bash
npm install @adobe/node-fetch-retry
```

## 使用量

这个图书馆的工作和正常一样 [`fetch api`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API),但带有一些新增的功能.

### 默认行为

不配置任何参数,重试行为如下:

-   60年代的重试
-   重试 100 ms 的内延, 并带有指数回放, 可配置为乘数默认为 2
-   只重试于 5xx 响应
-   在所有获取错误中重试
    -   ưμ㼯a [https://github.com/node-fetch/node-fetch/blob/main/docs/ERROR-HANDLING.md 互联网档案馆的存檔,存档日期2014-12-22](https://github.com/node-fetch/node-fetch/blob/main/docs/ERROR-HANDLING.md)
-   30s的套接字超时

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url);
}
```

此示例只使用自定义头并会使用默认的重试设置 :

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        headers: {
            'custom-header': '<<put custom header value here>>'
        }
    });
}
```

### 可选自定义参数

所有重试选项可配置并可以设置在 `retryOptions` 输入 `options` 对象传递到 `fetch`。 。 。 .

| 参数 | 格式 | 说明 | 环境变量 | 默认值 |
| --- | --- | --- | --- | --- |
| `retryMaxDuration` | 数目 | 重试时间以毫秒为单位,直到出现错误 | `NODE_FETCH_RETRY_MAX_RETRY` | 60 000毫秒( |
| `retryInitialDelay` | 数目 | 在复试之间等待的时间( 毫秒) | `NODE_FETCH_RETRY_INITIAL_WAIT` | 100分钟 |
| `retryBackoff` | 数目 | 复试之间等待时间的后退因子 | `NODE_FETCH_RETRY_BACKOFF` | 2.0 数据 |
| `retryOnHttpResponse` | 函数 | (单位:千美元) _函数_ 确定是否重试 HTTP 响应。 能够同步 | 无 | 在所有 5xx 错误上重试 |
| `retryOnHttpError` | 函数 | (单位:千美元) _函数_ 以 HTTP 出错例外来决定是否重试 。 能够同步 | 无 | 全部重试 `FetchError`类型 `system` |
| `socketTimeout` | 数目 | 以毫秒计,直到套接字超时. _说明: `socketTimeout` 这是 qq `retryMaxDuration`,它会自动调整套接字超时, 以精确的半数 `retryMaxDuration`。要禁用此特性,请参见 `forceSocketTimeout` 下级_ | `NODE_FETCH_RETRY_SOCKET_TIMEOUT` | 30 000 毫秒( |
| `forceSocketTimeout` | 布尔 | 如果为真, 套接字超时将被迫使用 `socketTimeout` 所申报的财产,不论 `retryMaxDuration`。 。 。 . _注:这一功能旨在帮助单位测试,无意在实践中使用_ | `NODE_FETCH_RETRY_FORCE_TIMEOUT` | 虚假 |

_注:如果未设置相应的参数,则环境变量将超过默认值。 这些设备旨在帮助单位测试。 通过参数仍然会覆盖环境变量_

### 自定义参数示例

此示例减少了 `retryMaxDuration` 并让重试延迟一个静态500ms。 这样只能重复4次了.

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryMaxDuration: 2000,  // 30s retry max duration
            retryInitialDelay: 500,
            retryBackoff: 1.0 // no backoff
        }
    });
}
```

此示例显示如何配置对 HTTP 特定响应的重试 :

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryOnHttpResponse: function (response) {
                if ( (response.status >= 500) || response.status >= 400) { // retry on all 5xx and all 4xx errors
                    return true;
                }
            }
        }
    });
}
```

此示例使用自定义 `socketTimeout` 值 :

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryMaxDuration: 300000, // 5min retry duration
            socketTimeout: 60000, //  60s socket timeout
        }
    });
}
```

此示例使用自定义 `socketTimeout` 值和自定义标题 :

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryMaxDuration: 300000, // 5min retry duration
            socketTimeout: 60000, //  60s socket timeout
        },
        headers: {
            'custom-header': '<<put custom header value here>>'
        }
    });
}
```

此示例显示如何重试所有 HTTP 错误作为例外 :

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryOnHttpError: function (error) {
                return true;
            }
        }
    });
}
```

### 禁用重试

您可以通过设置来禁用所有重试行为 `retryOptions` 改为 `false`。 。 。 .

```js
const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: false
    });
}
```

无法重试行为不会阻止使用设置在 `options` 对象.

### 关于重试期限的补充说明

如果抓取失败, 重试逻辑将决定下次尝试要等待多久 。 如果剩余时间将超过重试MaxDuration所允许的总时间,那么将不会再次尝试. 在测试代码中,有这样操作的例子.

### Apache OpenWhisk 动作支持

如果您在 OpenWhisk 动作中运行此选项, 它会在设定动作超时时时考虑此选项 `retryMaxDuration`它使用 `__OW_ACTION_DEADLINE` 用于确定是否有动作运行的环境变量.

行为: 若为 `retryMaxDuration` 大于动作暂停前的时间,它将调整 `retryMaxDuration` 与行动暂停的时间相等.

### 捐款

欢迎捐款! 读取 [贡献指南](https://npmcn.com/package/%40adobe/node-fetch-retry/.github/CONTRIBUTING.md) 更多信息.

### 许可证发放

这个项目根据Apache V2许可证获得许可. 见 [自由主义](https://npmcn.com/package/%40adobe/node-fetch-retry/LICENSE) 更多信息.

## 常见问题

### @adobe/node-fetch-retry 是什么？

执行 HTTP 请求重试的库

### 如何安装 @adobe/node-fetch-retry？

在项目目录运行 npm install @adobe/node-fetch-retry，或使用 pnpm add / yarn add / bun add。

### @adobe/node-fetch-retry 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @adobe/node-fetch-retry 支持 ESM 还是 CommonJS？

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

### @adobe/node-fetch-retry 可以商用吗？

@adobe/node-fetch-retry 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @adobe/node-fetch-retry 的下载量有多少？

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

### @adobe/node-fetch-retry 还在维护吗？

最新版本 2\.2\.0 发布于 2022/03/08（4 年前）；至今共发布 12 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/04/24。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

