Maison >interface Web >js tutoriel >Comment éviter les valeurs non définies lors du chaînage de .then() à des promesses ?
Chaînage de .then() à des promesses : éviter les valeurs non définies
Lorsque vous enchaînez plusieurs méthodes .then() à une promesse, il est important de renvoie une valeur ou une promesse de chaque gestionnaire .then() pour éviter de rencontrer des valeurs non définies lors des appels .then() ultérieurs.
Dans votre exemple :
<code class="javascript">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 });</code>
Le problème ici est que le Le premier gestionnaire .then() ne renvoie aucune valeur ni promesse. Par conséquent, lorsque le deuxième gestionnaire .then() est appelé, il n'a rien avec lequel travailler.
Pour résoudre ce problème, renvoyez simplement le résultat du premier gestionnaire .then() :
<code class="javascript">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; // return the result to avoid undefined at next .then() }); } doStuff(9) .then((data) => { console.log("data is: " + data); // data is not undefined });</code>
Maintenant, le deuxième gestionnaire .then() recevra le résultat du premier gestionnaire comme paramètre de données, et il ne sera pas indéfini.
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!