any-promise

中文文档
1.3.0发布于 2016/05/08MITTypeScriptCommonJS零依赖近 30 天下载 2.3亿

解决任何安装的ES6兼容承诺

中文使用文档
文档目录7 节
  1. 任何承诺
  2. 用全球承诺:
  3. 登记使用:
  4. 可选申请登记
  5. 图书馆的使用
  6. 对旧节点.js版本的支持
  7. 相关

任何承诺

Build Status

让您的库支持任何 ES 2015 (ES6) 兼容性 Promise 并让申请作者选择。 申请可以 可选择 注册首选 Promise 执行,并在需要时导出 any-promise 从图书馆代码.

如果没有登记首选项,则默认为全局 Promise 用于更新的Node.js版本. 浏览器版本默认为窗口 Promise,必要时进行多填充或登记.

用全球承诺:

假设全球 Promise 所期望的执行:

# Install any libraries depending on any-promise
$ npm install mz

已安装的图书馆将默认使用全球承诺 .

// in library
var Promise = require('any-promise')  // the global Promise

function promiseReturningFunction(){
    return new Promise(function(resolve, reject){...})
}

登记使用:

假设 bluebird 承诺的履行:

# Install preferred promise library
$ npm install bluebird
# Install any-promise to allow registration
$ npm install any-promise
# Install any libraries you would like to use depending on any-promise
$ npm install mz

在申请条目中将首选位置登记在其它条目之前 require 装入的软件包 any-promise数字 :

// top of application index.js or other entry point
require('any-promise/register/bluebird')

// -or- Equivalent to above, but allows customization of Promise library
require('any-promise/register')('bluebird', {Promise: require('bluebird')})

现在执行已注册, 您可以根据 any-promise数字 :

var fsp = require('mz/fs') // mz/fs will use registered bluebird promises
var Promise = require('any-promise')  // the registered bluebird promise 

打电话很安全 register 但必须始终执行.

同样,注册是 选项。它只能由应用程序用户在覆盖全局时调用 Promise 需要执行.

可选申请登记

作为申请作者,你可以 可选择 首选项 Promise 应用程序启动前执行 require('any-promise')数字 :

在接到任何电话之前,您必须登记您的优先选择 require('any-promise') (由您或需要的软件包),只有一个执行可以注册。 这种登记通常发生在申请入境点的顶端.

登记快捷键

如果你使用一个已知的 Promise ,您可以使用快捷键登记您的首选项 :

require('any-promise/register/bluebird')
// -or-
import 'any-promise/register/q';

快捷注册是首选的注册方法,因为它在浏览器和节点.js中有效. 与 import 和许多测试跑者, 这提供 --require 旗帜 :

$ ava --require=any-promise/register/bluebird test.js

目前已知的实施情况包括: bluebird, (中文(简体) ), q, (中文(简体) ), when, (中文(简体) ), rsvp, (中文(简体) ), es6-promise, (中文(简体) ), promise, (中文(简体) ), native-promise-only, (中文(简体) ), pinkie, (中文(简体) ), vow 财务报告和审定财务报表 lie。如果您没有使用已知的执行方法,可以使用下述另一种登记方法.

基本登记

作为注册快捷键的替代办法,您可以拨打 register 带有首选项的函数 Promise 执行。 这种办法的好处是: Promise 库可以按名称要求,而不需要已知的执行。 此方法在浏览器中不起作用 。 用于 any-promise 在浏览器中使用注册快捷键或指定 Promise 使用高级注册的建筑师(见下文).

require('any-promise/register')('when')
// -or- require('any-promise/register')('any other ES6 compatible library (known or otherwise)')

这种登记方法将试图检测 Promise 用于要求指定执行的构造器。 如果您想指定自己的建筑师,请查看高级注册.

高级注册

要使用浏览器版本,您应当安装多填充,或者明确注册 Promise 构造器 :

require('any-promise/register')('bluebird', {Promise: require('bluebird')})

这也可以用来登记习惯 Promise 执行或子类.

您的首选将在全球注册, 即使有多个版本 any-promise 安装在国家预防机制依赖树上,或正在使用浏览器中多个捆绑的JavaScript文件。 您可以在选项中绕过此全局注册 :

require('../register')('es6-promise', {Promise: require('es6-promise').Promise, global: false})

图书馆的使用

用来使用任何 Promise 构造器,只需要它:

var Promise = require('any-promise');

return Promise
  .all([xf, f, init, coll])
  .then(fn);


return new Promise(function(resolve, reject){
  try {
    resolve(item);
  } catch(e){
    reject(e);
  }
});

除下文指出的情况外,图书馆使用 any-promise 只应使用 文档 函数,因为无法保证申请人选择哪个执行。 图书馆不应该打电话 register,如果需要,只有应用程序用户才能拨打.

高级图书馆使用

如果您的库需要基于注册执行的分支代码, 您可以使用 var impl = require('any-promise/implementation')时 impl 将是软件包名称( e)"bluebird", (中文(简体) ), "when"如果登记, "global.Promise" 如果在 Node.js 上使用全局版本,或 "window.Promise" 如果使用浏览器版本。 您应当总是包含默认情况, 因为无法保证哪些软件包可以注册 .

对旧节点.js版本的支持

前节点.js版本 v0.12 可能含有错误的全局版本 Promise为此,全球 Promise 未自动装入这些旧版本。 如果使用 any-promise 在节点.js版本中 <= v0.12,用户应登记所期望的执行.

如果未登记一项实施工作, any-promise 将尝试发现已安装的 Promise 执行。 如果找不到执行文件, 就会出现错误 require('any-promise')。虽然自动发现通常避免出错,但它不是决定性的。 建议用户总是对更古老的Node.js版本的首选执行进行注册.

这种自动发现只供节点使用. 之前的jS版本 v0.12。任何更新版本将永远默认为全球 Promise 执行.

版本与发布记录

any-promise 共发布 8 个版本,首次发布于 2014/11/06;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.3.0latest2016/05/0810 年前
1.2.02016/05/0310 年前
1.1.02016/02/0310 年前
1.0.02016/02/0110 年前
0.2.02016/01/3010 年前
0.1.02015/01/0111 年前

关于 any-promise 的常见问题

any-promise 是什么?

解决任何安装的ES6兼容承诺

如何安装 any-promise?

在项目目录运行 npm install any-promise,或使用 pnpm add / yarn add / bun add。

any-promise 支持 TypeScript 吗?

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

any-promise 支持 ESM 还是 CommonJS?

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

any-promise 可以商用吗?

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

any-promise 的下载量有多少?

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

any-promise 还在维护吗?

最新版本 1.3.0 发布于 2016/05/08(10 年前);至今共发布 8 个版本,其中过去 12 个月发布了 0 个;首次发布于 2014/11/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。