Comment fonctionne Angular $ q.when?

95

Quelqu'un peut-il m'expliquer comment $q.whenfonctionne AngularJS? J'essaie d'analyser comment $httpfonctionne et j'ai trouvé ceci:

var promise = $q.when(config);

Et voici l'objet de configuration de la console Chrome:

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

Que se passe-t-il ensuite? Comment cet objet est-il résolu ou rejeté?

ENSEMBLE
la source
$ q implémente les modèles de promesse, son simple wrapper autour des rappels en javascript .Ainsi, lorsque le rappel est déclenché avec succès, les promesses sont résolues
Ajay Beniwal
1
@Ajaybeniwal, mais dans ce cas, l'objet est passé, pas de rappel. Comment cela a-t-il été résolu / rejeté en cas de passage de l'objet, pas de rappel?
SET

Réponses:

113

L'appel $q.whenprend une promesse ou tout autre type, si ce n'est pas une promesse, il l'enveloppera dans une promesse et la résolution de l'appel. Si vous lui transmettez une valeur, elle ne sera jamais rejetée.

À partir de la documentation:

Enveloppe un objet qui pourrait être une valeur ou une promesse (tierce) alors capable dans une promesse $ q. Ceci est utile lorsque vous avez affaire à un objet qui pourrait ou non être une promesse, ou si la promesse provient d'une source à laquelle on ne peut pas faire confiance.

Derek Ekins
la source
If you pass a value to it- mais que faire si je passe un objet?
SET
11
valeur, objet, tableau c'est pareil.
Derek Ekins
3
et si je passe une fonction qui renvoie une promesse? cela signifie-t-il que le rappel de celui-ci recevra le paramètre de résultat de promesse envoyé par résoudre?
Onur Topal
3
Onur, quand vous dites passer une fonction, voulez - vous dire comme un objet de fonction: $q.when(myfunc)ou en appelant la fonction de votre passage à: $q.when(myfunc())? Je ne sais pas exactement ce que fera le premier ... le second invoquera en myfunc()premier et passera la promesse | valeur renvoyée à .when().
jrista