2013-09-23 18 views
6

Mam kilka starych bibliotek JavaScript, które używają jQuery promises jako obiektów powrotu z wywołań funkcji. Używam teraz AngularJS, która używa $q service (inspirowanej przez Q library). Czy ktoś ma jakiś ogólny kod JavaScript, aby te dwie różne implementacje obietnic były kompatybilne, tak że obietnice jQuery mogą być używane tak, jakby to było, gdy $ q obiecuje? Lub coś podobnego?

+0

Dziękuję za odpowiedź. Wiedziałem o tym, ale trudno go zastosować wszędzie. Poniższa odpowiedź jest bardziej tym, czego szukałem (i prawdopodobnie innych). –

Odpowiedz

21

Obietnice osób trzecich można opakować za pomocą $q.when(thirdPartyPromise) w celu ich konwersji na kwoty w wysokości $ q. Kiedy thirdPartyPromise rozwiązuje, obietnica $ q rozwiązuje się i wywołuje się $scope.$apply().

+0

Thanx! Brakowało tego w dokumentach. –

+2

Cieszę się, że $ q również podniosło to z Q. Sztuczka polega na tym, że wszystko, co implementuje "promise.then (cb, eb)", może zostać rzucone na obietnicę innego typu, ignorując wartość zwracaną. Nazywa się to "nieśmiertelnością". –

+0

@KrisKowal, jeśli otoczy opakowanie '$ q.when()', to prawdopodobnie będzie to prosta forma przymusu '$ q (thirdPartyPromise)'? –