Maison > Questions et réponses > le corps du texte
P粉6161110382023-08-22 12:43:32
Lorsqu'une promesse est résolue/rejetée, elle appelle son gestionnaire de réussite/erreur :
var promiseB = promiseA.then(function(result) { // 用result做一些事情 });La méthode
then
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 :
promiseB = promiseA.then(function(result) { return result + 1; });
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.
P粉1551282112023-08-22 00:10:42
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.
promiseB.then(function(result) { // 这里你可以使用promiseB的结果 });
À 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 :
let result = await functionThatReturnsPromiseA(); result = result + 1;
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 fonction async
. Donc en zoomant un peu, le code ci-dessus doit être contenu dans une fonction :
async function doSomething() { let result = await functionThatReturnsPromiseA(); return result + 1; }
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.