10

规范没有涵盖Promise 库的哪些方面?实现之间有哪些不同?

请举例说明实际差异(例如 Bluebird 和 Q 之间的差异)。

4

1 回答 1

12

几乎所有的。Promises/A+ 规范旨在实现 Promise 互操作性,它的构建使得 Promises 库(现在是原生 Promise)可以相互通信。这个想法是为了可以预测 promise 的行为方式并定义 promise 如何被其他库吸收。

引用规范:

该规范详细说明了该then方法的行为,提供了一个可互操作的基础,所有符合 Promises/A+ 的 Promise 实现都可以依赖该基础来提供。因此,规范应该被认为是非常稳定的。尽管 Promises/A+ 组织可能偶尔会修改此规范,并通过较小的向后兼容更改来解决新发现的极端情况,但只有在仔细考虑、讨论和测试后,我们才会集成大型或向后不兼容的情况。最后,核心 Promises/A+ 规范不涉及如何创建、履行或拒绝 Promise,而是选择专注于提供可互操作的 then 方法。未来的配套规范工作可能会涉及这些主题。

不包括以下内容:

  • 创建一个 Promise(这是Promise 构造函数规范)。
  • Promise 聚合(尽管大多数实现都支持.all)。
  • 进度(这是进度规范,很快就会被 imo 取代)。
  • 取消(即取消规范)。
  • 未处理的拒绝监控(没有规范,但有检查讨论)。
  • 堆栈跟踪。

例如,Bluebird 和 Q 都完全是 Promises/A+ 投诉,​​但在很多方面有所不同:

  • 下一个 Q,v2 引入了估计,Bluebird 打算最终弃用进度,转而支持 C# 的 IProgress 之类的东西。
  • 在 Q 中创建一个 Promise 通常是通过 deferreds 完成的(尽管它现在提供了一个 Promise 构造函数变体),Bluebird 鼓励使用 Promise 构造函数。
  • Bluebird 具有更强大和更强大的 Promisification 能力,将整个回调 API 转换为单个命令中的 Promise。Q 作者 Kris 构建了手动承诺文件系统和 http 模块的 Q-IO。
  • Bluebird 允许通过, 和 promise 数组方法 ( ,等)对this值进行范围绑定。.bind.map.reduce.filter
  • Q 有诸如异步队列之类的原语,以及通过 Q-connection 进行的 RPC,
  • Bluebird 大约快 100 倍,具有更好的堆栈跟踪和自动未处理的拒绝检测。每个 promise 消耗的 RAM 内存也少得多。

这是另一个参考

于 2014-05-01T08:00:40.903 回答