我正在研究BreezeJs,并且有样本正在使用Q.js来承诺处理异步调用。 John Papa也在使用Q. JQuery has promises as well。这两者有什么不同?
答案 0 :(得分:49)
两者都基于Promises/A standard并实施then
方法(虽然只有当前的jQuery,但它们曾经有一个不兼容的pipe
而不是then
)。但是,存在一些差异:
then
回调中的所有抛出错误并拒绝承诺(并且只有在您调用.end()
时才会重新抛出)。不确定我个人是否喜欢这样。这是jQuery不遵循的标准化方式,rejecting from then
in jQuery deferreds is much more complicated。then
返回/抛出它),而jQuery允许在其{Devers}的resolve
/ reject
调用中使用多个参数。 .all
且类似,jQuery($.when.apply($, […])
)更复杂。 ...基本上是Promises/B。如您所见,Q
API更强大,而且(imho)设计得更好。根据你想要做的事情,Q
可能是更好的选择,但也许jQuery(特别是如果已经包含)就足够了。
答案 1 :(得分:18)
JQuery承诺实施Promises / A规范有一些实际问题。以下链接比我更好地描述了它们:missing-the-point-of-promises
答案 2 :(得分:13)
Bergi的回答很好地涵盖了事情。不过,我想补充说,我们创建了a guide for Q users coming from jQuery。总结相关部分:
then
/ pipe
进行链接。this
)。因此,没有resolveWith
或rejectWith
。该指南还包含一个与jQuery和Q promise API并列的表。