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?

EINSTELLEN
quelle
$ 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.

Derek Ekins
quelle
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