Maison >interface Web >js tutoriel >Comment éviter les valeurs non définies lors du chaînage de .then() à des promesses ?

Comment éviter les valeurs non définies lors du chaînage de .then() à des promesses ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-19 22:18:29389parcourir

How to Avoid Undefined Values When Chaining .then() to Promises?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn