Maison > interface Web > js tutoriel > Pourquoi ma fonction asynchrone renvoie-t-elle « Promise { } » au lieu d'une valeur ?

Pourquoi ma fonction asynchrone renvoie-t-elle « Promise { } » au lieu d'une valeur ?

Barbara Streisand
Libérer: 2024-12-13 06:07:17
original
897 Les gens l'ont consulté

Why Does My Asynchronous Function Return `Promise {  }` Instead of a Value?

Promesse de retour de fonction asynchrone { } Au lieu d'une valeur

Comme le démontre le code fourni, les fonctions asynchrones renvoient souvent une promesse, qui représente la valeur finalement disponible. Cependant, lorsque vous tentez d'accéder immédiatement à sa valeur, la console enregistre "Promise { }" en raison de l'état non résolu de la promesse.

Résolution des valeurs de promesse

Pour obtenir la valeur de token souhaitée, vous devez enchaîner un gestionnaire ".then" à votre promesse. Ce gestionnaire capture le résultat résolu, qu'il soit déjà disponible ou toujours en attente :

let AuthUser = (data) => {
  return google.login(data.username, data.password).then((token) => {
    return token;
  });
};

let userToken = AuthUser(data);
userToken.then((result) => {
  console.log(result); // "Some User Token"
});
Copier après la connexion

Détails de la résolution de la promesse

Les promesses adhèrent à la spécification Promises/A, qui impose une procédure de résolution spécifique :

  • Si le gestionnaire ".then" renvoie une valeur, la promesse se résout à celle-ci valeur.
  • Si le gestionnaire renvoie une autre promesse, la promesse est résolue à la valeur résolue de la promesse chaînée.

Comprendre le chaînage de promesses

La valeur résolue de chaque gestionnaire ".then" devient l'entrée du gestionnaire suivant, permettant une chaîne d'opérations asynchrones. Les exemples suivants illustrent ce comportement :

Retour de valeur :

function initPromise() {
  return new Promise((res, rej) => {
    res("initResolve");
  });
}

initPromise()
  .then((result) => {
    console.log(result); // "initResolve"
    return "normalReturn";
  })
  .then((result) => {
    console.log(result); // "normalReturn"
  });
Copier après la connexion

Retour de promesse chaînée :

function initPromise() {
  return new Promise((res, rej) => {
    res("initResolve");
  });
}

initPromise()
  .then((result) => {
    console.log(result); // "initResolve"
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("secondPromise");
      }, 1000);
    });
  })
  .then((result) => {
    console.log(result); // "secondPromise"
  });
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!

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