Maison > interface Web > js tutoriel > le corps du texte

Pourquoi le chaînage de promesses renvoie-t-il un résultat non défini dans certains cas ?

Susan Sarandon
Libérer: 2024-10-19 22:15:02
original
432 Les gens l'ont consulté

Why Does Promise Chaining Return Undefined in Some Cases?

Pourquoi undefined est-il renvoyé par .then() dans le chaînage de promesses ?

Dans le chaînage de promesses, .then() renvoie un nouvel objet Promise . Cependant, si aucune valeur ou promesse n'est explicitement renvoyée par le rappel .then(), la promesse résultante sera résolue en indéfini.

Considérez le code suivant :

<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
});</code>
Copier après la connexion

Dans ce code, les données ne sont pas définies dans le .then() final car le premier .then() ne renvoie aucune valeur. Pour résoudre ce problème, nous pouvons modifier le premier .then() pour renvoyer la valeur du résultat :

<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; // Return result to avoid undefined
  });
}

doStuff(9)
.then(data => {
  console.log("data is: " + data); // data is no longer undefined
});</code>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal