Javascript 如何实现承诺/A+;实现不同?
规范没有涵盖承诺库的哪些方面?不同的实现有什么不同Javascript 如何实现承诺/A+;实现不同?,javascript,promise,q,bluebird,rsvp-promise,Javascript,Promise,Q,Bluebird,Rsvp Promise,规范没有涵盖承诺库的哪些方面?不同的实现有什么不同 请举例说明实际差异(如蓝鸟和Q之间的差异)。几乎所有差异。Promises/A+规范旨在实现promise互操作性,它的构建使promise库(现在是原生Promises)可以相互通信。这样做的目的是可以预测承诺的行为,并定义承诺如何被其他库吸收 引用规范: 本规范详细说明了then方法的行为,提供了一个可互操作的基础,所有承诺/A+符合承诺的实现都可以依赖该基础来提供。因此,应认为该规范非常稳定。尽管Promises/A+组织可能偶尔会修改本
请举例说明实际差异(如蓝鸟和Q之间的差异)。几乎所有差异。Promises/A+规范旨在实现promise互操作性,它的构建使promise库(现在是原生Promises)可以相互通信。这样做的目的是可以预测承诺的行为,并定义承诺如何被其他库吸收 引用规范: 本规范详细说明了
then
方法的行为,提供了一个可互操作的基础,所有承诺/A+符合承诺的实现都可以依赖该基础来提供。因此,应认为该规范非常稳定。尽管Promises/A+组织可能偶尔会修改本规范,对其进行一些小的向后兼容更改,以解决新发现的死角情况,但只有在仔细考虑、讨论和测试之后,我们才会集成大型或向后不兼容的规范。最后,核心承诺/A+规范没有涉及如何创建、履行或拒绝承诺,而是选择专注于提供可互操作的方法。未来在配套规范中的工作可能涉及这些主题
不包括以下内容:
- 创建承诺(这是规范)
- 承诺聚合(尽管大多数实现支持
).all
- Progression(这是最新版本,很快将被imo取代)
- 取消(这是最重要的)
- 未处理的拒收监控(没有规范,但有检查讨论)
- 堆栈跟踪
- 下一个Q,v2引入了估算,蓝鸟打算最终不赞成渐进式,而赞成C#的IProgress
- 创建承诺通常在Q中使用延迟(尽管它现在提供了一个承诺构造函数变体),Bluebird鼓励使用承诺构造函数
- Bluebird具有更健壮和更强的promisification能力,可以在单个命令中将整个回调API转变为承诺。Q作者Kris构建了Q-IO,该Q-IO手动提供文件系统和http模块
- Bluebird允许通过
和promise数组方法(.bind
,.map
,.reduce
等)对.filter
值进行范围绑定李>此
- Q具有异步队列和通过Q连接的RPC之类的基本体
- Bluebird大约快100倍,具有更好的堆栈跟踪和自动未处理拒绝检测。它还可以减少每个承诺所消耗的RAM内存