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!