J'ai un code javascript comme celui-ci:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
J'ai toujours une valeur indéfinie pour le test var. Je pense que c'est parce que les promesses ne sont pas encore résolues .. existe-t-il un moyen de renvoyer une valeur à partir d'une promesse?
javascript
promise
Priscy
la source
la source
then()
appel est à nouveau une promesse, qui encapsule la valeur que vous avez renvoyée.promise
. Vous ne l'affichez nulle part et vous ne renvoyez rien de votrejustTesting()
fonction. Si vous voulez une meilleure aide, vous devez décrire le problème que vous essayez de résoudre plutôt que de simplement nous montrer du code qui est tellement "désactivé" qu'il n'illustre même pas ce que vous essayez vraiment de faire. Expliquez le problème que vous essayez de résoudre.Réponses:
Lorsque vous renvoyez quelque chose à partir d'un
then()
rappel, c'est un peu magique. Si vous renvoyez une valeur, la suivantethen()
est appelée avec cette valeur. Cependant, si vous retournez quelque chose de semblable à une promesse, le suivantthen()
attend, et n'est appelé que lorsque cette promesse se règle (réussit / échoue).Source: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions
la source
Pour utiliser une promesse, vous devez soit appeler une fonction qui crée une promesse, soit en créer une vous-même. Vous ne décrivez pas vraiment le problème que vous essayez vraiment de résoudre, mais voici comment créer vous-même une promesse:
Ou, si vous avez déjà une fonction qui renvoie une promesse, vous pouvez utiliser cette fonction et renvoyer sa promesse:
la source
return
, c'est-à-direjustTesting
ditreturn.then => return
. Je sais que cela fonctionne bcs j'ai implémenté cela (bcs linting m'a obligé à, loin denew Promise
), mais pouvez-vous expliquer comment comprendre / penser à cette paire retour / retour?.then()
est une fonction distincte de la fonction contenant, donc quand elle est appelée, elle a sa propre valeur de retour. Deuxièmement, la valeur de retour d'un.then()
gestionnaire devient la valeur résolue de la promesse. Donc,.then(val => {return 2*val;})
change la valeur résolue deval
à2*val
.Ce que j'ai fait ici, c'est que j'ai renvoyé une promesse de la fonction justTesting. Vous pouvez ensuite obtenir le résultat lorsque la fonction est résolue.
J'espère que cela t'aides!
la source
Je préfère utiliser la commande "await" et les fonctions asynchrones pour me débarrasser des confusions de promesses,
Dans ce cas, j'écrirais d'abord une fonction asynchrone, celle-ci sera utilisée à la place de la fonction anonyme appelée sous "promise.then" partie de cette question:
puis j'appellerais cette fonction à partir de la fonction principale:
Notant que j'ai renvoyé la fonction principale et la fonction secondaire aux fonctions asynchrones ici.
la source