# @braintree/extended-promise 中文文档

规范地址：https://npmcn.com/package/%40braintree/extended-promise/

版本：1\.0\.3
npm 元数据更新时间：2026-01-29T18:05:43.250Z
中文译文更新时间：2026-11-08T13:45:04.880Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40braintree/extended-promise
原文对照：https://npmcn.com/package/%40braintree/extended-promise/?lang=original
项目主页：https://github.com/braintree/extended-promise
源码仓库：https://github.com/braintree/extended-promise

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

- 包体积（解压后）：29.6 kB，7 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2019-12-18T15:22:47.441Z
- 最新版本发布：2026-01-29T18:05:43.139Z
- 近 30 天下载量：3577998（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：11（近 12 个月 1 个）

## 中文简介

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

## 安装

```sh
npm install @braintree/extended-promise
```

也可以使用：`pnpm add @braintree/extended-promise`、`yarn add @braintree/extended-promise`、`bun add @braintree/extended-promise`

## README

## 扩展承诺

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

## 安装

```sh
npm install @braintree/extended-promise
```

## 为什么?

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

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

```js
// 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;
  }
}
```

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

```js
// 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` 可在即时传递的钩子 :

```js
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` 选项,当即时定义:

```js
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`编号:

```js
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
})
```

## 使用自定义承诺执行

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

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

ExtendedPromise.setPromise(PromisePolyfill);
```

## 发展

运行测试 :

```sh
npm test
```

## 常见问题

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

