使jQuery Deferred/Promises和AngularJS $q Deferred/Promises兼容

6
我有一些旧的JavaScript库,使用jQuery promises作为函数调用的返回对象。现在我正在使用AngularJS,它使用$q service(受Q库启发)。 是否有任何通用的JavaScript代码可以使这两个不同的promise实现兼容,以便可以像使用$q promises一样使用jQuery promises?或者类似的东西?

谢谢您的回复。我知道这个方法,但是在每个地方都应用它很麻烦。下面的答案更符合我(和可能其他人)的需求。 - Maarten Docter
1个回答

21

第三方承诺可以使用$q.when(thirdPartyPromise)进行包装,以转换为$q承诺。当thirdPartyPromise解决时,$q承诺也相应地解决,并调用$scope.$apply()


2
我很高兴 $q 也能从 Q 中学到这点。诀窍在于任何实现 promise.then(cb, eb) 的东西都可以被转换为另一种类型的 promise,忽略返回值。 这被称为“thenability”。 - Kris Kowal
@KrisKowal,如果$q.when()包装器可行,那么简单形式的强制转换$q(thirdPartyPromise)也应该可行吧? - Beetroot-Beetroot
@KrisKowal 我希望 Angular 能够采用整个 Q 库 :) - Nikos Paraskevopoulos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接