Promises/A +实现如何变化?

cal*_*lum 10 javascript promise q bluebird rsvp-promise

什么方面的承诺库的不规范覆盖?实施之间有什么不同?

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

Ben*_*aum 12

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

引用规范:

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

以下内容不包括在内:

  • 创建一个promise(这是promise构造函数规范).
  • 承诺聚合(尽管大多数实现支持.all).
  • 进展(这是进展规范,很快将被替换为imo).
  • 取消(这是取消规范).
  • 未处理的拒绝监控(没有规范,但有一个检查讨论).
  • 堆栈痕迹.

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

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

这是另一个参考