2013-09-23 11 views
6

Ich habe einige alte JavaScript-Bibliotheken, die jQuery promises als Rückgabeobjekte von Funktionsaufrufen verwenden. Ich verwende jetzt AngularJS, die die $q service (inspiriert von der Q library) verwendet. Hat jemand etwas generischen JavaScript-Code, um diese zwei verschiedenen Versprechen Implementierungen kompatibel zu machen, so dass jQuery Versprechen verwendet werden kann, als ob es wo $ q verspricht? Oder etwas ähnliches?

+0

Vielen Dank für Ihre Antwort. Ich kannte das hier, aber es ist mühsam, es überall anzuwenden. Die Antwort unten ist mehr, was ich (und wahrscheinlich andere) gesucht habe. –

Antwort

21

Versprechen von Dritten können mit $q.when(thirdPartyPromise) verpackt werden, um in $ q Versprechen umgewandelt zu werden. Wenn das thirdPartyPromise verrechnet wird, wird das $ q-Versprechen entsprechend aufgelöst und $scope.$apply() wird aufgerufen.

+0

Danke! Verpasste das in den Dokumenten. –

+2

Ich bin froh, dass $ q das von Q übernommen hat. Der Trick besteht darin, dass alles, was 'promise.then (cb, eb)' implementiert, in ein Versprechen eines anderen Typs umgewandelt werden kann, wobei der Rückgabewert ignoriert wird. Es heißt "Wendigkeit". –

+0

@KrisKowal, wenn der '$ q.when()' Wrapper woks, dann wird das vermutlich auch die einfache Form des Zwanges '$ q (thirdPartyPromise)'? –