Problem:
Im bereitgestellten Code:
let AuthUser = data => { return google.login(data.username, data.password).then(token => { return token } ) }
Bei der Ausführung von Folgendem:
let userToken = AuthUser(data) console.log(userToken)
Die Ausgabe ist:
Promise { <pending> }
Erklärung:
Versprechen in JavaScript werden zur Darstellung asynchroner Vorgänge verwendet. Wenn eine asynchrone Funktion ein Versprechen zurückgibt, das noch ungelöst ist, wird sie beim Drucken als „ausstehend“ protokolliert.
Um das Ergebnis eines asynchronen Aufrufs zu erfassen, müssen Sie die .then-Methode für das Versprechen verwenden. Diese Methode verwendet eine Rückruffunktion als Argument, die ausgeführt wird, wenn das Versprechen aufgelöst wird.
Lösung:
Um das Token von der asynchronen Funktion korrekt zu protokollieren, Ändern Sie den Code wie folgt:
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" })
Durch die Verwendung von .then können Sie das Ergebnis des Versprechens verarbeiten, unabhängig davon, ob es gelöst ist oder noch besteht ausstehend.
Details:
Promises werden nur einmal aufgelöst und der aufgelöste Wert wird an die Methoden .then oder .catch übergeben. Die Promises/A-Spezifikation besagt, dass das Versprechen mit diesem Wert aufgelöst wird, wenn die Funktion im .then-Handler einen Wert zurückgibt. Wenn der Handler ein weiteres Versprechen zurückgibt, wird das ursprüngliche Versprechen mit dem aufgelösten Wert des verketteten Versprechens aufgelöst.
Das obige ist der detaillierte Inhalt vonWarum gibt meine Async-Funktion „Promise { }' anstelle des erwarteten Werts zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!