問題:
在提供的程式碼中:
let AuthUser = data => { return google.login(data.username, data.password).then(token => { return token } ) }
執行下列指令時:
let userToken = AuthUser(data) console.log(userToken)
輸出是:
Promise { <pending> }
解釋:
JavaScript 中的 Promise 用來表示非同步操作。如果非同步函數傳回仍未解決的 Promise,則在列印時它將記錄為「pending」。
要捕捉非同步呼叫的結果,必須在 Promise 上使用 .then 方法。此方法採用回調函數作為參數,該函數將在 Promise 解決時執行。
解決方案:
要正確記錄來自非同步函數的令牌,修改程式碼如下:
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" })
透過使用.then,你可以處理promise的結果,無論它是resolved還是resolved待處理。
詳細資料:
Promise 只解析一次,解析後的值會傳遞給 .then 或 .catch 方法。 Promises/A 規範規定,如果 .then 處理程序中的函數傳回一個值,則 Promise 將使用該值進行解析。如果處理程序傳回另一個 Promise,則原始 Promise 將使用鍊式 Promise 的解析值進行解析。
以上是為什麼我的非同步函數回傳 `Promise { }` 而不是預期值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!