Maison >interface Web >js tutoriel >Pourquoi .then() enchaîné à une promesse renvoie-t-il un défini ?

Pourquoi .then() enchaîné à une promesse renvoie-t-il un défini ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-19 22:17:29501parcourir

Why Does .then() Chained to a Promise Return Undefined?

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!

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