Maison > Article > interface Web > Pourquoi .then() enchaîné à une promesse renvoie-t-il un défini ?
Pourquoi .then() enchaîné à une promesse renvoie un résultat non défini
Considérez l'extrait de code ci-dessous :
<code class="js">function doStuff(n) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(n * 10); }, Math.floor(Math.random() * 1000)); }) .then((result) => { if (result > 100) { console.log(`${result} is greater than 100`); } else { console.log(`${result} is not greater than 100`); } }); } doStuff(9) .then((data) => { console.log(data); // undefined, why? });</code>
Pourquoi la valeur des données n'est-elle pas définie dans le deuxième rappel .then() ?
Réponse :
Lorsque vous enchaînez un rappel .then() à une promesse, il renvoie une nouvelle promesse qui correspond à la valeur de retour du rappel. Cependant, dans le code fourni, aucune valeur ou promesse n'est renvoyée par le premier .then().
Solution :
Pour résoudre le problème, vous devez retourner une valeur ou invoquer une autre fonction qui renvoie une valeur ou une promesse à partir du premier .then(). Voici une version mise à jour du code :
<code class="js">function doStuff(n) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(n * 10); }, Math.floor(Math.random() * 1000)); }) .then((result) => { if (result > 100) { console.log(`${result} is greater than 100`); } else { console.log(`${result} is not greater than 100`); } // Return `result` here to avoid undefined at chained `.then()`. return result; }); } doStuff(9) .then((data) => { console.log(`data is: ${data}`); // data is not undefined });</code>
Dans ce code mis à jour, le premier .then() renvoie la valeur du résultat (n multiplié par 10), ce qui garantit que le second .then() reçoit une valeur définie comme argument.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!