@braintree/extended-promise

中文文档
1.0.3发布于 2026/01/30MITTypeScriptCommonJS零依赖近 30 天下载 357.8万

保证是伟大的! 但是,他们会更好吗?

中文使用文档
文档目录8 节
  1. 扩展承诺
  2. 安装
  3. 为什么?
  4. 当承诺解析/ 拒绝时, 添加钩子以运行
  5. 禁止未经处理的拒绝承诺警告
  6. 用作正常的许诺
  7. 使用自定义承诺执行
  8. 发展

扩展承诺

保证是伟大的! 但是,他们会更好吗?

安装

npm install @braintree/extended-promise

为什么?

这个库是为了与不易被承诺包裹的API合作而开发的,例如踢出一个在事件听众召回内解决的承诺.

在写这首诗之前,我们保留了对基础承诺的引用,并提及 resolve编号 :reject 功能,以便日后解决并拒绝:

// without this lib
class MyCustomObject {
  constructor() {
    this._promise = new Promise((resolve, reject) => {
      this._resolveFunction = resolve;
      this._rejectFunction = reject;
    });
  }

  asyncProcess() {
    // do something very async that's not easily wrapped in a promise
    if (success) {
      this._resolveFunction(data);
    } else {
      this._rejectFunction(new Error("fail"));
    }
  }

  methodRelyingOnResultOfPromise() {
    return this._promise;
  }
}

相反,我们可以省略一则只提及承诺,然后直接解决或拒绝承诺:

// with this lib
class MyCustomObject {
  constructor() {
    this._promise = new ExtendedPromise();
  }

  asyncProcess() {
    // do something very async that's not easily wrapped in a promise
    if (success) {
      this._promise.resolve(data);
    } else {
      this._promise.reject(new Error("fail"));
    }
  }

  methodRelyingOnResultOfPromise() {
    return this._promise;
  }
}

当承诺解析/ 拒绝时, 添加钩子以运行

该对象还提供 onResolve 财务报告和审定财务报表 onReject 可在即时传递的钩子 :

var promise = new ExtendedPromise({
  onResolve(data) {
    return someFunctionToTransformData(data);
  },
  onReject(error) {
    // decide if you want to catch the error
    return someFallbackDataInstead;
    // or if you want to continue through with the rejection
    return Promise.reject(error);
  },
});

禁止未经处理的拒绝承诺警告

使用的好处之一 ExtendedPromise 即你可以把承诺对象传到周围 并同步捕捉错误 然而,这可以导致节点或浏览器假设,当承诺在你添加了拒绝处理器之前就拒绝,那么承诺是完全不处理的. 为了压制这些警告,请添加 suppressUnhandledPromiseMessage 选项,当即时定义:

var promise = new ExtendedPromise({
  suppressUnhandledPromiseMessage: true,
});

// do async stuff that results in the promise rejecting
// and don't worry about Node or the browser being
// angry about it

promise.catch(function (err) {
  // handle this later
});

你也可以在全球为所有人设定 ExtendedPromise编号:

ExtendedPromise.suppressUnhandledPromiseMessage = true;

var promise = new ExtendedPromise();

// do async stuff that results in the promise rejecting
// and don't worry about Node or the browser being
// angry about it

promise.catch(function (err) {
  // handle this later
});

如果设定全球财产和实例财产,它将使用实例财产.

用作正常的许诺

何时 ExtendedPromise 以函数即时化,它将返回基本承诺。 这个 resolve 财务报告和审定财务报表 reject 实例方法不应使用这种方法。 这样做只是为了使移徙更容易使用扩展承诺.

var promise = new ExtendedPromise(function (resolve, reject) {
  // if success
  resolve('value');

  // if failure
  reject(new Error('err'));
});

promise.then(val => {
  // handle result
}).catch(err => {
  // handle error
})

使用自定义承诺执行

如果您的环境不支持承诺, 您可以设置承诺对象直接用于对象 .

const PromisePolyfill = require("promise-polyfill");

ExtendedPromise.setPromise(PromisePolyfill);

发展

运行测试 :

npm test

版本与发布记录

@braintree/extended-promise 共发布 11 个版本,首次发布于 2019/12/18;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.0.3latest2026/01/309 个月前
1.0.12025/01/081.8 年前
1.0.02023/11/083 年前
0.4.12020/09/126 年前
0.4.02020/07/146 年前
0.3.12020/07/026 年前

关于 @braintree/extended-promise 的常见问题

@braintree/extended-promise 是什么?

保证是伟大的! 但是,他们会更好吗?

如何安装 @braintree/extended-promise?

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

@braintree/extended-promise 支持 TypeScript 吗?

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

@braintree/extended-promise 支持 ESM 还是 CommonJS?

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

@braintree/extended-promise 可以商用吗?

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

@braintree/extended-promise 的下载量有多少?

根据 npm 官方下载统计,@braintree/extended-promise 在 2026/10/09 – 2026/11/07 这 30 天内被下载 3,577,998 次,日均约 119,267 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@braintree/extended-promise 还在维护吗?

最新版本 1.0.3 发布于 2026/01/30(9 个月前);至今共发布 11 个版本,其中过去 12 个月发布了 1 个;首次发布于 2019/12/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。