pify

中文文档
6.1.0发布于 2022/09/02MITTypeScriptES Module零依赖近 30 天下载 4.1亿

Promision 回调函数

中文使用文档
文档目录6 节
  1. 安装
  2. 使用量
  3. API 密码
  4. pify( 输入, 选项 )
  5. 财务问题
  6. 相关

标注

Promision 回调函数

安装

npm install pify

使用量

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 返回多个参数。 打开此选项将使它返回调用的所有参数, 但不包括错误参数, 而不仅仅是第二个参数 。 这也适用于拒绝,它返回一系列所有回调参数,包括错误.

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

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

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? 吗?

  • 证明在很久以前就已经存在过 util.promisify。 。 。 .
  • 说明 快点。 。 。 .
  • Pify支持将整个模块/对象,而不仅仅是一个特定的方法进行包接.
  • Pify 具有处理多个参数的能力等有用选项(multiArgs) (中文(简体) ).
  • Pify 没有 魔法行为 对于某些节点方法,而是侧重于可预测性.

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

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

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 且您的输入有 函数超载,然后只选择最后的超载,并进行杂交.

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

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>

以 Tidelift 订阅方式获取“ pify” 的专业支持
Tidelift 有助于让开源为维护者持续提供,同时给公司
保证其依赖性的安全、维持和许可证发放.

版本与发布记录

pify 共发布 13 个版本,首次发布于 2015/08/29;过去 12 个月发布了 0 个版本。

版本发布日期距今
6.1.0latest2022/09/024 年前
6.0.02022/06/064 年前
5.0.02020/02/156 年前
4.0.12018/10/228 年前
4.0.02018/08/098 年前
3.0.02017/05/289 年前

关于 pify 的常见问题

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 和提交记录判断。