Promises / A +实现如何变化?

时间:2014-05-01 07:32:40

标签: javascript promise q bluebird rsvp-promise

规范库的哪些方面的规范涵盖?实施之间有什么不同?

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

1 个答案:

答案 0 :(得分:12)

几乎所有事情。 Promises / A +规范旨在实现承诺互操作性,它构建了承诺库(现在,本机承诺)可以相互通信。我们的想法是可以预测承诺的行为方式,并定义其他图书馆如何承诺同化

引用规范:

  

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

以下内容未包括在内:

  • 创建承诺(promise constructor规范)。
  • 承诺聚合(尽管大多数实现都支持.all)。
  • 升读(即progression spec,即将被替换为imo)。
  • 取消(cancellation spec)。
  • 未处理的拒绝监控(没有规范,但有检查讨论)。
  • 堆栈痕迹。
例如,Bluebird和Q都完全是Promises / A +投诉,但在很多方面都有所不同:

  • 接下来的Q,v2引入了估算,Bluebird打算最终弃用升级,转而支持C#的IProgress。
  • 通常在Q中使用延迟来创建一个promise(尽管它现在提供了一个promise构造函数变体),Bluebird鼓励promise构造函数。
  • Bluebird拥有更强大和更强大的预授权能力,将整个回调API转换为单一命令中的承诺。 Q作者Kris构建了Q-IO,它手动宣传文件系统和http模块。
  • Bluebird允许通过this.bind值进行范围绑定,并允许数组方法(.map.reduce.filter等)。
  • Q具有异步队列这样的原语,并且考虑到了通过Q连接的RPC,
  • Bluebird大约快100倍,具有更好的堆栈跟踪和自动未处理的拒绝检测。它还会为每个承诺消耗更少的RAM内存。

Here is another reference