Maison  >  Article  >  interface Web  >  Pourquoi la chaîne de promesses sans renvoyer de valeur entraîne-t-elle des valeurs non définies ?

Pourquoi la chaîne de promesses sans renvoyer de valeur entraîne-t-elle des valeurs non définies ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-19 22:13:29591parcourir

Why Do Promises Chain Without Returning a Value Result in Undefined Values?

Comprendre la valeur non définie dans les promesses chaînées

En JavaScript, les promesses sont utilisées pour les opérations asynchrones. Ils fournissent un moyen de gérer les résultats des calculs et de gérer des scénarios tels que le succès et l'échec. Cependant, nous rencontrons parfois une valeur inattendue de indéfini lors du chaînage des promesses.

Cause fondamentale : chaînage sans valeur renvoyée

Les promesses sont chaînées à l'aide de la méthode .then(). Lorsqu'une promesse est résolue ou rejetée, la méthode .then() renvoie un nouvel objet Promise. Cependant, si aucune valeur ou promesse n'est explicitement renvoyée par la méthode .then(), le nouvel objet Promise sera résolu avec une valeur par défaut non définie.

Exemple :

<code class="javascript">doStuff(9)
  .then(function(result) {
    // No value or Promise returned
    if (result > 100) {
      console.log(result + " is greater than 100");
    } else {
      console.log(result + " is not greater than 100");
    }
  })
  .then(function(data) {
    console.log(data); // Output: undefined
  });</code>

Dans cet exemple, la première méthode .then() ne renvoie aucune valeur. En conséquence, la deuxième méthode .then() reçoit undefined comme argument, qui est ensuite imprimé sur la console.

Solution : renvoyer une valeur ou une promesse

Pour éviter les valeurs non définies dans les promesses chaînées, une valeur ou une promesse qui renvoie une valeur doit être explicitement renvoyée par la méthode .then().

Exemple :

<code class="javascript">doStuff(9)
  .then(function(result) {
    if (result > 100) {
      console.log(result + " is greater than 100");
    } else {
      console.log(result + " is not greater than 100");
    }
    // Return the result to avoid undefined at the next .then()
    return result;
  })
  .then(function(data) {
    console.log("data is: " + data); // Output: "data is: 90"
  });</code>

En renvoyant le résultat, la deuxième méthode .then() reçoit la valeur réelle du résultat au lieu de non définie.

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