首頁 > web前端 > js教程 > 為什麼我的非同步函數回傳 `Promise { }` 而不是預期值?

為什麼我的非同步函數回傳 `Promise { }` 而不是預期值?

Linda Hamilton
發布: 2024-12-09 22:03:12
原創
899 人瀏覽過

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

為什麼我的非同步函數會回傳 Promise { ;而不是值?

問題:

在提供的程式碼中:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板