Wie funktioniert Angular $ q.when?


95

Kann mir $q.whenjemand erklären, wie in AngularJS funktioniert? Ich versuche zu analysieren, wie es $httpfunktioniert und habe Folgendes gefunden:

var promise = $q.when(config);

Und hier ist das Konfigurationsobjekt von der Chrome-Konsole:

Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…}
cache: Object
headers: Object
method: "GET"
transformRequest: Array[1]
transformResponse: Array[1]
url: "/schedule/month_index.html"
__proto__: Object

Was passiert als nächstes? Wie wird dieses Objekt aufgelöst oder abgelehnt?


$ q implementiert Versprechensmuster seinen einfachen Wrapper um Rückrufe in Javascript. Wenn also Rückruf erfolgreich ausgelöst wird, werden die Versprechungen gelöst
Ajay Beniwal

1
@ Ajaybeniwal, aber in diesem Fall Objekt übergeben, kein Rückruf. Wie wurde es aufgelöst / abgelehnt, wenn ein Objekt übergeben wurde, kein Rückruf?
SET

Antworten:


113

Das Anrufen $q.whenerfordert ein Versprechen oder einen anderen Typ. Wenn es sich nicht um ein Versprechen handelt, wird es in ein Versprechen eingewickelt und die Lösung des Anrufs festgelegt. Wenn Sie einen Wert übergeben, wird dieser niemals abgelehnt.

Aus den Dokumenten:

Wickelt ein Objekt, das ein Wert oder ein (Drittanbieter-) Versprechen sein könnte, in ein $ q-Versprechen ein. Dies ist nützlich, wenn Sie sich mit einem Objekt befassen, das möglicherweise ein Versprechen ist oder nicht, oder wenn das Versprechen von einer Quelle stammt, der nicht vertraut werden kann.


If you pass a value to it- aber was ist, wenn ich ein Objekt passiere?
SET

11
Wert, Objekt, Array ist alles gleich.
Derek Ekins

3
Was ist, wenn ich eine Funktion übergebe, die ein Versprechen zurückgibt? Bedeutet dies, dass der Rückruf des Versprechensergebnisses durch Auflösung gesendet wird?
Onur Topal

3
Onur, wenn Sie sagen, eine Funktion übergeben, meinen Sie als Funktionsobjekt: $q.when(myfunc)oder indem Sie die Funktion aufrufen, die Sie übergeben : $q.when(myfunc())? Ich weiß nicht genau, was der erstere tun wird ... der letztere wird myfunc()zuerst aufrufen und den zurückgegebenen Versprechenwert an weitergeben .when().
jrista
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.