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

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

Susan Sarandon
Libérer: 2024-10-19 22:17:29
original
378 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!