# pify 中文文档

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

版本：6\.1\.0
npm 元数据更新时间：2023-06-17T00:08:09.166Z
中文译文更新时间：2026-11-05T15:03:01.077Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：13.6 kB，5 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=14\.16
- 运行依赖：0 个
- 首次发布：2015-08-29T08:15:22.672Z
- 最新版本发布：2022-09-02T12:55:21.948Z
- 近 30 天下载量：406065783（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 0 个）

## 中文简介

Promision 回调函数

## 安装

```sh
npm install pify
```

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

## README

# 标注

> Promision 回调函数

## 安装

```sh
npm install pify
```

## 使用量

```js
import fs from 'fs';
import pify from 'pify';

// Promisify a single function.
const data = await pify(fs.readFile)('package.json', 'utf8');
console.log(JSON.parse(data).name);
//=> 'pify'

// Promisify all methods in a module.
const data2 = await pify(fs).readFile('package.json', 'utf8');
console.log(JSON.parse(data2).name);
//=> 'pify'
```

## API 密码

### pify( 输入, 选项 )

回返a `Promise` 所提供函数或模块的包装版本.

#### 投入

类型 : `Function | object`

回调风格的函数或模块,其方法您想要混合 .

#### 选项

类型 : `object`

##### 多参数

类型 : `boolean`  
默认 : `false`

默认情况下,被打包的函数只会从回调中返回第二个参数,这对大多数API都有效. 此选项可用于模块 `request` 返回多个参数。 打开此选项将使它返回调用的所有参数, 但不包括错误参数, 而不仅仅是第二个参数 。 这也适用于拒绝,它返回一系列所有回调参数,包括错误.

```js
import request from 'request';
import pify from 'pify';

const pRequest = pify(request, {multiArgs: true});

const [httpResponse, body] = await pRequest('https://sindresorhus.com');
```

##### 包含

类型 : `Array<string | RegExp>`

模块中混合的方法. 其余的方法将保持不变.

##### 排除

类型 : `Array<string | RegExp>`  
默认 : `[/.+(?:Sync|Stream)$/]`

模块中的方法 **没有** 用来打杂 名称结束的方法 `'Sync'` 默认除外.

##### 排除主语

类型 : `boolean`  
默认 : `false`

如果给定的模块本身是一个函数,则会被混合. 如果您只想要混合模块的方法, 请启用此选项 .

```js
import pify from 'pify';

function fn() {
    return true;
}

fn.method = (data, callback) => {
    setImmediate(() => {
        callback(null, data);
    });
};

// Promisify methods but not `fn()`.
const promiseFn = pify(fn, {excludeMain: true});

if (promiseFn()) {
    console.log(await promiseFn.method('hi'));
}
```

##### 第一个出错

类型 : `boolean`  
默认 : `true`

调用符是否有错误作为第一个参数 。 你会想设置这个 `false` 如果你在处理的API 没有错误 作为第一个论点,像 `fs.exists()`,一些浏览器API,Chrome扩展API等.

##### 承诺模块

类型 : `Function`

自定义承诺模块将使用而不是本地模块 .

## 财务问题

#### 这和Node.js的有什么不同 [`util.promisify`](https://nodejs.org/api/util.html#util_util_promisify_original)? 吗?

-   证明在很久以前就已经存在过 `util.promisify`。 。 。 .
-   说明 [快点](https://github.com/sindresorhus/pify/issues/41#issuecomment-429988506)。 。 。 .
-   Pify支持将整个模块/对象,而不仅仅是一个特定的方法进行包接.
-   Pify 具有处理多个参数的能力等有用选项(`multiArgs`) (中文(简体) ).
-   Pify 没有 [魔法行为](https://nodejs.org/api/util.html#util_custom_promisified_functions) 对于某些节点方法,而是侧重于可预测性.

#### 我怎么能用单一的分类方法?

阶级方法不受约束,所以当他们没有被召唤到阶级本身时,他们没有任何上下文. 你可以打乱整个班级 或者使用 `.bind()`。 。 。 .

```js
import pify from 'pify';
import SomeClass from './some-class.js';

const someInstance = new SomeClass();

// ❌ `someFunction` can't access its class context.
const someFunction = pify(someClass.someFunction);

// ✅ The whole class is promisified and the `someFunction` method is called on its class.
const someClassPromisified = pify(someClass);
someClassPromisified.someFunction();

// ✅ `someFunction` is bound to its class before being promisified.
const someFunction = pify(someClass.someFunction.bind(someClass));
```

#### 为什么 `pify` 在使用 TypeScript 时选择最后一个函数超载吗 ?

如果您正在使用 TypeScript 且您的输入有 [函数超载](https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads),然后只选择最后的超载,并进行杂交.

如果您需要选择不同的超载, 请考虑使用类型断言 :

```ts
function overloadedFunction(input: number, callback: (error: unknown, data: number => void): void
function overloadedFunction(input: string, callback: (error: unknown, data: string) => void): void {
    /* … */
}

const fn = pify(overloadedFunction as (input: number, callback: (error: unknown, data: number) => void) => void)
// ^ ? (input: number) => Promise<number>
```

## 相关

-   [p- 活动](https://github.com/sindresorhus/p-event) - 通过等待排放来促成一个事件
-   [p- 地图](https://github.com/sindresorhus/p-map) - 地图同时覆盖承诺
-   [还有..](https://github.com/sindresorhus/promise-fun)

* * *

**[以 Tidelift 订阅方式获取“ pify” 的专业支持](https://tidelift.com/subscription/pkg/npm-pify?utm_source=npm-pify&utm_medium=referral&utm_campaign=readme)**  
Tidelift 有助于让开源为维护者持续提供,同时给公司  
保证其依赖性的安全、维持和许可证发放.

## 常见问题

### pify 是什么？

Promision 回调函数

### 如何安装 pify？

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

### pify 支持 TypeScript 吗？

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

### pify 支持 ESM 还是 CommonJS？

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

### pify 需要什么版本的 Node\.js？

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

### pify 可以商用吗？

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

### pify 的下载量有多少？

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

### pify 还在维护吗？

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

