Ember 的 Promises 与一般的 Promises 有啥关系,特别是 jQuery 的 Promises?

Posted

技术标签:

【中文标题】Ember 的 Promises 与一般的 Promises 有啥关系,特别是 jQuery 的 Promises?【英文标题】:How are Ember's Promises related to Promises in general, and specifically jQuery's Promises?Ember 的 Promises 与一般的 Promises 有什么关系,特别是 jQuery 的 Promises? 【发布时间】:2013-07-04 04:08:39 【问题描述】:

一些有助于了解 Ember 承诺的宏观问题:

    Ember's RSVP 是否与Tildeio's RSVP 相同?如果不是,它们有何不同?它们有什么关系?

    javascript“Promise”是否有不同的风格,即规范?如果是这样,jQuery Promise 是否使用一组类型的 Promise 规范(它是什么?)而 Ember 的 RSVP.Promise 使用另一组 Promise 规范,即 Promises/A+?

    Ember RSVP's Promise.then()、Tildeio RSVP's Promise.then() 和 jQuery's deferred.then() 有什么关系? Ember 的 Promisethen() 与 jQuery 的 Promisethen() 有什么不同? 最好知道以避免错误。

Ember 的 RSVP.Promise 在 Ember 的 RESTAdapter 的 updateRecord 的 ajax call 中使用的示例。这些是关于 jQuery Promise、then() #1 和 then() #2 的一些 SO 帖子。我现在很迷茫。

【问题讨论】:

【参考方案1】:

这是一个很大的话题。上个月我们花了几个小时讨论它EmberNYC meetup。如果你想了解 Promise,一个很好的起点是检查:

Domenic Denicola's intro to the power of the Promises pattern in Javascript Stefan Penner 关于promises in Ember and Ember apps 用法的演讲
    Ember 的 RSVP 是否与 Tildeio 的 RSVP 相同?如果不是,它们有何不同?它们有什么关系?

基本一样。 Tildeio 的 RSVP 是 RSVP 积极开发的地方。 Ember 的 RSVP 是该库的副本。

    JavaScript“Promise”是否有不同的风格,即规范?如果是这样,jQuery Promise 是否使用了一组类型的 Promise 规范(它是什么?)而 Ember 的 RSVP.Promise 使用了另一组不同的 Promise 规范,即 Promises/A+?

当然,它有不同的风格,与其说是设计,不如说是事物的发展方式。 Promises/A+ 是众多 proposed promise specs 之一,并且似乎具有最大的吸引力。大多数 Promise 实现(包括 RSVP)都符合 Promises/A+,这意味着它们通过了test-suite。

我不相信 jQuery 的 Promise 实现本身有不同的规范。它几乎但不完全符合 Promises/A。在大多数情况下,他们在一起玩得很好。有几个与错误处理相关的极端情况,其中 jQuery 承诺可能不会像您期望的那样运行。 Domenic 在他的演讲中详细介绍了这一点,您还可以在这篇文章中找到有关它的信息:whats so great about js promises

Ember RSVP 的 Promise.then()、Tildeio RSVP 的 Promise.then() 和 jQuery 的 deferred.then() 有什么关系?

Ember 和 Tildeio RSVP 是一回事。 jQuery 的基本相同,除了:

“如果错误处理程序返回的不是 Promise,大多数实现都认为错误已处理,并且不传播它。但是,jQuery 不考虑在这些情况下处理的错误,并且无论如何都会将其传播。” - whats so great about js promises

【讨论】:

谢谢迈克。顺便说一句,你说“你也可以在这篇文章中找到有关它的信息:”你是遗漏了什么还是这篇文章只是 Domenic 的谈话链接? 应该是 Bryan Klimt 的这篇文章的链接:blog.parse.com/2013/01/29/…

以上是关于Ember 的 Promises 与一般的 Promises 有啥关系,特别是 jQuery 的 Promises?的主要内容,如果未能解决你的问题,请参考以下文章

4.11 Routing -- Loading/Error Substates

如何将 fs.createReadstream 与 fs.promises 一起使用

简单的 Q Promises 节点示例

Vue.js、Vuex 与 Promises

我怎么知道,哪个 ember 插件版本与 ember-cli 或节点版本兼容

Ember.js 中的视图与组件