Maison > interface Web > js tutoriel > Pourquoi ma fonction asynchrone renvoie-t-elle « Promise { } » au lieu de la valeur attendue ?

Pourquoi ma fonction asynchrone renvoie-t-elle « Promise { } » au lieu de la valeur attendue ?

Linda Hamilton
Libérer: 2024-12-09 22:03:12
original
900 Les gens l'ont consulté

Why Does My Async Function Return `Promise {  }` Instead of the Expected Value?

Pourquoi ma fonction asynchrone renvoie-t-elle la promesse { } Au lieu d'une valeur ?

Problème :

Dans le code fourni :

let AuthUser = data => {
  return google.login(data.username, data.password).then(token => { return token } )
}
Copier après la connexion

Lors de l'exécution de ce qui suit :

let userToken = AuthUser(data)
console.log(userToken)
Copier après la connexion

La sortie est :

Promise { <pending> }
Copier après la connexion

Explication :

Les promesses en JavaScript sont utilisées pour représenter des opérations asynchrones. Si une fonction asynchrone renvoie une promesse qui n'est toujours pas résolue, elle sera enregistrée comme « en attente » une fois imprimée.

Pour capturer le résultat d'un appel asynchrone, vous devez utiliser la méthode .then sur la promesse. Cette méthode prend comme argument une fonction de rappel, qui sera exécutée lorsque la promesse sera résolue.

Solution :

Pour enregistrer correctement le jeton de la fonction asynchrone, modifiez le code comme suit :

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

let userToken = AuthUser(data)
console.log(userToken) // Promise { <pending> }

userToken.then(function(result) {
   console.log(result) // "Some User token"
})
Copier après la connexion

En utilisant .then, vous pouvez gérer le résultat de la promesse, qu'elle soit résolue ou toujours en attente.

Détails :

Les promesses ne sont résolues qu'une seule fois et la valeur résolue est transmise aux méthodes .then ou .catch. La spécification Promises/A indique que si la fonction du gestionnaire .then renvoie une valeur, la promesse est résolue avec cette valeur. Si le gestionnaire renvoie une autre promesse, la promesse d'origine est résolue avec la valeur résolue de la promesse chaînée.

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.cn
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