首頁 >web前端 >js教程 >為什麼非同步函數會傳回待處理的 Promise 而不是立即值?

為什麼非同步函數會傳回待處理的 Promise 而不是立即值?

DDD
DDD原創
2024-12-13 19:20:11288瀏覽

Why Do Asynchronous Functions Return Pending Promises Instead of Immediate Values?

為什麼非同步函數會傳回有掛起狀態的 Promise 而不是值?

程式碼定義了一個非同步函數 AuthUser,它呼叫google.login() 並傳回它產生的承諾。當函數被呼叫時,promise 會被記錄為待處理狀態,因為它的結果尚未被解析。

解決方案:

要訪問 Promise 的解析值,它必須與 .then() 鏈接,即使它仍然處於掛起狀態。例如:

AuthUser(data)
  .then((token) => {
    console.log(token); // "Some User token"
  });

詳細資料:

Promise 是單向操作。一旦解析,它們的值就會傳遞給 .then() 或 .catch() 方法,無論它們的狀態如何(已解析或待處理)。 .then() 的回傳值是 Promise 的解析值。

在提供的程式碼中,AuthUser 直接傳回 Promise,使其解析值在呼叫 .then() 之前不可用。

其他見解:

  • 承諾/規範規定如果 .then() 處理程序傳回一個值,則 Promise 將使用該值進行解析。如果它傳回另一個 Promise,則原始 Promise 將使用鍊式 Promise 的解析值進行解析。
  • 鍊式 .then() 處理程序將始終包含前面 .then() 傳回的鍊式 Promise 的解析值。
  • 如果 .then() 處理程序傳回一個 Promise,則該鍊式 Promise 的解析值將傳遞給下列內容.then().

以上是為什麼非同步函數會傳回待處理的 Promise 而不是立即值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn