Comment obtenir la valeur de la promesse ?
P粉116631591
2023-08-21 13:47:33
<p>Je regardais la documentation Angular pour des exemples de <code>$q</code>, mais j'ai pensé que cela pourrait fonctionner pour les promesses en général. L'exemple ci-dessous est copié directement de leur documentation, y compris leurs commentaires : </p>
<pre class="brush:php;toolbar:false;">promiseB = promiseA.then(function(result) {
renvoyer le résultat + 1 ;
});
// Lorsque promiseA est résolue, promiseB sera résolue immédiatement et sa valeur sera le résultat de promiseA plus 1</pre>
<p>Je ne sais pas comment cela fonctionne. Si je pouvais appeler <code>.then()</code> sur le résultat du premier <code>.then()</code>, en les enchaînant ensemble, je sais que je pourrais le faire, alors < ;code>promiseB</code> est un objet de promesse de type <code>Object</code>. Il ne s'agit pas d'un <code>Numéro</code>. Alors, que veulent-ils dire par « sa valeur sera le résultat de la promesse A plus 1 » ? </p>
<p>Dois-je y accéder comme <code>promiseB.value</code> ? Comment un rappel réussi peut-il renvoyer une promesse et renvoyer « résultat + 1 » ? Il me manque quelque chose. </p>
Lorsqu'une promesse est résolue/rejetée, elle appelle son gestionnaire de réussite/erreur :
La méthode
Le gestionnaire de réussite/erreur dethen
renvoie également une promesse : promiseB qui sera résolue/rejetée en fonction de la valeur de retour du gestionnaire de succès/erreur de promiseA.promiseA peut renvoyer trois valeurs possibles qui affecteront le résultat de promiseB :
Avec cette compréhension, vous pouvez comprendre ce qui suit :
Ensuite, l'appel renvoie immédiatement la promesseB.
Lorsque promiseA est résolue, elle transmet le résultat au gestionnaire de réussite de promiseA.
Puisque la valeur de retour est le résultat de promiseA + 1 et que le gestionnaire de succès renvoie une valeur (option 2 ci-dessus), promiseB sera résolue immédiatement et le gestionnaire de succès de promiseB recevra le résultat de promiseA + 1.
La valeur renvoyée dans la fonction de réussite de
promiseA
的then
函数返回一个新的promise(promiseB
),在promiseA
解决后立即解决,其值是在promiseA
.Dans ce cas,
promiseA
解决为一个值-result
,然后立即使用result + 1
的值解决promiseB
.Accédez aux résultats de
promiseB
的值与访问promiseA
de la même manière.À partir de ECMAScript 2016 (ES7, 2016),
async
/await
devient le standard en JavaScript, ce qui permet une syntaxe alternative à l'approche ci-dessus. Maintenant vous pouvez écrire comme ceci :Il n'y a pas de promesseB maintenant car nous avons déroulé le résultat de la promesseA en utilisant
await
et vous pouvez l'utiliser directement.Cependant,
await
只能在async
ne peut être utilisé que dans une fonctionasync
. Donc en zoomant un peu, le code ci-dessus doit être contenu dans une fonction :Pour être clair, dans cet exemple
doSomething
函数的返回值仍然是一个promise,因为async函数返回的是promise。所以如果你想要访问返回值,你需要使用result = await doSomething()
, cela ne peut être utilisé que dans une autre fonction asynchrone. Fondamentalement, dans le contexte asynchrone parent, vous avez un accès direct aux valeurs produites par le contexte asynchrone enfant.