19

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

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

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

  3. Ember RSVP'sPromise.then()、Tildeio RSVP'sPromise.then()jQuery's 有deferred.then()什么关系? Ember 的Promiseandthen()与 jQuery 的Promiseand有何不同then() 知道避免错误是件好事。

在 Ember 的 RESTAdapter 的updateRecordajax 调用中使用 Ember 的RSVP.Promise示例。这些是关于 jQuery Promisethen() #1then() #2的一些 SO 帖子。我现在处于迷茫状态。

4

1 回答 1

23

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

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

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

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

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

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

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

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

“如果错误处理程序返回的不是 Promise,大多数实现都会考虑处理了错误,并且不会传播它。但是,jQuery 不会考虑在这些情况下处理的错误,并且无论如何都会将其传播。” - js 承诺有什么了不起

于 2013-07-06T03:54:54.713 回答