# @effectionx/fetch 中文文档

规范地址：https://npmcn.com/package/%40effectionx/fetch/

版本：0\.2\.1
npm 元数据更新时间：2026-09-30T21:08:21.395Z
中文译文更新时间：2026-11-13T08:27:54.634Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：83.5 kB，20 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：1 个
- peer 依赖：effection ^3 \|\| ^4
- 首次发布：2026-02-16T14:46:07.407Z
- 最新版本发布：2026-08-07T19:22:20.449Z
- 近 30 天下载量：47467（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 6 个）

## 中文简介

带有结构化的货币和流式响应支持的效应本地获取

## 安装

```sh
npm install @effectionx/fetch
```

也可以使用：`pnpm add @effectionx/fetch`、`yarn add @effectionx/fetch`、`bun add @effectionx/fetch`

## README

# 获取

效果- 内在获取, 并有结构化的货币和流式响应支持 .

* * *

## 安装

```bash
npm install @effectionx/fetch effection
```

## 使用量

```ts
import { main } from "effection";
import { fetch } from "@effectionx/fetch";

await main(function* () {
  let users = yield* fetch("https://api.example.com/users").json();
  console.log(users);
});
```

### 流利的 API

直接打开的链路方法 `fetch()` 用于简洁的一行:

```ts
// JSON
let data = yield* fetch("https://api.example.com/users").json();

// Text
let html = yield* fetch("https://example.com").text();

// With validation - throws HttpError on non-2xx
let data = yield* fetch("https://api.example.com/users").expect().json();
```

### 传统 API

你也可以先得到反应,然后消耗身体:

```ts
let response = yield* fetch("https://api.example.com/users");
let data = yield* response.json();
```

### 精简应对机构

```ts
import { each } from "effection";
import { fetch } from "@effectionx/fetch";

function* example() {
  for (let chunk of yield* each(fetch("https://example.com/large-file.bin").body())) {
    console.log(chunk.length);
    yield* each.next();
  }
}
```

### 同时提出的请求

```ts
import { all } from "effection";
import { fetch } from "@effectionx/fetch";

function* fetchMultiple() {
  let [users, posts, comments] = yield* all([
    fetch("https://api.example.com/users").json(),
    fetch("https://api.example.com/posts").json(),
    fetch("https://api.example.com/comments").json(),
  ]);

  return { users, posts, comments };
}
```

### 解析时验证 JSON

```ts
import { fetch } from "@effectionx/fetch";

interface User {
  id: string;
  name: string;
}

function parseUser(value: unknown): User {
  if (
    typeof value === "object" &&
    value !== null &&
    "id" in value &&
    "name" in value
  ) {
    return value as User;
  }

  throw new Error("invalid user payload");
}

function* getUser() {
  return yield* fetch("https://api.example.com/user").json(parseUser);
}
```

### 处理非-2xx回复

```ts
import { HttpError, fetch } from "@effectionx/fetch";

function* getUser(id: string) {
  try {
    return yield* fetch(`https://api.example.com/users/${id}`).expect().json();
  } catch (error) {
    if (error instanceof HttpError) {
      console.error(error.status, error.statusText);
    }
    throw error;
  }
}
```

## API 密码

### `fetch(input, init?)`

回返a `FetchOperation` 既支持流利的连锁,也支持传统使用.

-   `input` - URL 字符串, `URL` 对象,或 `Request` 对象
-   `init` - 可选 `FetchInit` 选项(与 `RequestInit` 但是没有 `signal`(中文(简体) )

取消是通过Evicion结构的货币自动处理的. 当 范围退出,飞行中请求中止。 已经解决的本地采集是 离开完好无损。 这个 `signal` 选项被故意省略,因为 Effection 管理 为你取消.

### `FetchOperation`

可链取操作返回 `fetch()`。 。 。 .

-   `json<T>()`, (中文(简体) ), `json<T>(parse)` - 解析反应为JSON
-   `text()` - 作为文本获得回复
-   `arrayBuffer()` - 获得响应作为阵列缓冲器
-   `blob()` - 作为Blob得到回应
-   `formData()` - 作为FormData获得响应
-   `body()` - 溪流反应机构: `Stream<Uint8Array, void>`
-   `expect()` - 返回一个新的 `FetchOperation` 抛出 `HttpError` 关于非-2xx的

也可以直接得到一个 `FetchResponse`数字 :

```ts
let response = yield* fetch("https://api.example.com/users");
```

### `FetchResponse`

效果包绕本地 `Response` 与基于操作的身体读取器.

-   `json<T>()`, (中文(简体) ), `json<T>(parse)`
-   `text()`
-   `arrayBuffer()`
-   `blob()`
-   `formData()`
-   `body(): Stream<Uint8Array, void>`
-   `expect()` - 掷出 `HttpError` 非-2xx回复
-   `raw` - 接触当地人 `Response`

## 常见问题

### @effectionx/fetch 是什么？

带有结构化的货币和流式响应支持的效应本地获取

### 如何安装 @effectionx/fetch？

在项目目录运行 npm install @effectionx/fetch，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：effection（^3 \|\| ^4）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @effectionx/fetch 支持 TypeScript 吗？

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

### @effectionx/fetch 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @effectionx/fetch 可以商用吗？

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

### @effectionx/fetch 的下载量有多少？

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

### @effectionx/fetch 还在维护吗？

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

