【问题标题】:How do Promises/A+ implementations vary?Promises/A+ 的实现有何不同?
【发布时间】:2014-06-17 16:50:59
【问题描述】:

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

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

【问题讨论】:

    标签: javascript promise q bluebird rsvp-promise


    【解决方案1】:

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

    引用规范:

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

    不包括以下内容:

    • 创建一个承诺(这是 promise constructor 规范)。
    • Promise 聚合(尽管大多数实现都支持.all)。
    • Progression(即progression spec,很快将被 imo 取代)。
    • 取消(即cancellation spec)。
    • 未处理的拒绝监控(没有规范,但有检查讨论)。
    • 堆栈跟踪。

    例如,Bluebird 和 Q 都完全是 Promises/A+ 投诉,​​但在很多方面存在差异:

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

    Here is another reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 2017-10-20
      • 1970-01-01
      • 2016-07-11
      • 2013-11-13
      • 1970-01-01
      相关资源
      最近更新 更多