Comment accéder à la valeur d'une promesse?
Je suis à la recherche de cet exemple de l'Angulaire de l'docs pour $q
mais je pense que cela s'applique probablement à des promesses en général. Ils ont cet exemple, copiée mot pour mot avec leur commentaire inclus:
promiseB = promiseA.then(function(result) {
return result + 1;
});
//promiseB will be resolved immediately after promiseA is resolved and its value
//will be the result of promiseA incremented by 1
Je ne suis pas clair comment cela fonctionne. Si je peux appeler .then()
sur le résultat de la première .then()
, chaîne, qui je sais que je peux, puis promiseB
est une promesse objet, de type Object
. Ce n'est pas un Number
. Alors, que veulent-ils dire par "sa valeur sera le résultat de promiseA incrémenté de 1"?
Suis-je censé accès que promiseB.value
ou quelque chose comme ça? Comment peut assurer le succès de rappel retour d'une promesse ET d'un retour "résultat + 1"? Je suis en manque de quelque chose.
- J'ai posé une question connexe: Pourquoi ne Promets pas un get() de la fonction?
Vous devez vous connecter pour publier un commentaire.
promiseA
'sthen
fonction retourne une nouvelle promesse (promiseB
) qui est immédiatement résolu aprèspromiseA
est résolu, sa valeur est la valeur de ce qui est retourné par le succès de la fonction au sein depromiseA
.Dans ce cas
promiseA
est résolu avec une valeurresult
puis immédiatement résoutpromiseB
avec la valeur deresult + 1
.Accéder à la valeur de
promiseB
est fait de la même façon, nous avons accédé à la suite depromiseA
.Quand une promesse est résolu/rejeté, il va appeler son succès et de son gestionnaire d'erreur:
La
then
méthode retourne une promesse: promiseB, qui seront résolus/a rejeté en fonction de la valeur de retour de la réussite/gestionnaire d'erreur de promiseA.Il y a trois valeurs possibles que promiseA du succès/gestionnaires d'erreur peut retour qui va affecter promiseB du résultat:
Fort de cette compréhension, vous pouvez faire sens de ce qui suit:
Alors appel renvoie promiseB immédiatement.
Lorsque promiseA est résolu, il va passer le résultat à promiseA du gestionnaire de succès.
Puisque la valeur de retour est promiseA résultat de + 1, le gestionnaire de succès est de retourner une valeur (option 2 ci-dessus), de sorte promiseB permettra de résoudre immédiatement, et promiseB succès du gestionnaire seront transmis promiseA résultat de + 1.
.then
fonction de promiseB reçoit ce qui est retourné à partir de.then
fonction de promiseA.ici promiseA est de retour est un nombre, qui sera disponible en
number
paramètre dans la réussite de la fonction de promiseB. qui sera ensuite incrémenté de 1De l'analyse du commentaire un peu différemment de votre compréhension actuelle pourrait aider:
Cela indique que
promiseB
est une promesse, mais seront résolus immédiatement aprèspromiseA
est résolu. Une autre façon de regarder ce qui signifie quepromiseA.then()
renvoie une promesse qui est attribué àpromiseB
.Cela signifie que la valeur
promiseA
résolu, c'est la valeur quepromiseB
va recevoir comme successCallback valeur:Vous pouvez facilement le faire en utilisant un async attendre méthode en javascript.
Ci-dessous est un exemple de la récupération d'un WebRTC promesse de la valeur à l'aide d'un délai d'attente.
JS:
pixelbits réponse est correcte et vous devriez toujours utiliser
.then()
pour accéder à la valeur d'une promesse dans le code de production.Cependant, il existe un moyen d'accéder à la promesse de valeur directement après qu'il a été résolu à l'aide de la non prise en charge interne node.js reliure:
AVERTISSEMENT: processus.la liaison n'était pas destiné à être utilisé en dehors de nodejs base et le nodejs équipe de base est activement à la recherche de déprécier il
https://github.com/nodejs/node/pull/22004
https://github.com/nodejs/node/issues/22064
Cet exemple, j'ai trouver l'auto-explicatif. Remarquez comment vous attendent attend le résultat et si vous ratez la Promesse d'être renvoyé.
Peut-être que ce petit texte dactylographié exemple de code va vous aider.
Ici la
repository.get(id)
renvoie unePromise<Account>
. Je l'affecter à la variableaccount
dans lethen
déclaration.