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
Linda Hamiltonoriginal
2024-12-09 22:03:12962parcourir

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 } )
}

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

let userToken = AuthUser(data)
console.log(userToken)

La sortie est :

Promise { <pending> }

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"
})

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!

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