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

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

Barbara Streisand
發布: 2024-12-13 06:07:17
原創
839 人瀏覽過

Why Does My Asynchronous Function Return `Promise {  }` Instead of a Value?

非同步函數傳回Promise { ;如所提供的程式碼所示,非同步函數通常會傳回一個Promise,它代表最終可用的值,而不是Value

。但是,當嘗試立即存取其值時,由於 Promise 的未解析狀態,控制台會記錄「Promise { }」。

正在解析 Promise 值

要取得所需的令牌值,您必須將「.then」處理程序連結到您的 Promise。此處理程序可擷取已解決的結果,無論它已經可用還是仍有待處理:

let AuthUser = (data) => {
  return google.login(data.username, data.password).then((token) => {
    return token;
  });
};

let userToken = AuthUser(data);
userToken.then((result) => {
  console.log(result); // "Some User Token"
});
登入後複製

Promise 解析詳細資訊

Promises 遵守 Promises/A規範,該規範強制要求具體的解析過程:

  • 如果「.then」處理程序傳回一個值,則Promise 解析為該值。
  • 如果處理程序傳回另一個 Promise,則 Promise 解析為鍊式 Promise 的解析值。

了解 Promise 鏈

每個「.then」處理程序的解析值成為下一個處理程序的輸入,啟用一系列非同步操作。以下範例說明了此行為:

值回傳:

function initPromise() {
  return new Promise((res, rej) => {
    res("initResolve");
  });
}

initPromise()
  .then((result) => {
    console.log(result); // "initResolve"
    return "normalReturn";
  })
  .then((result) => {
    console.log(result); // "normalReturn"
  });
登入後複製

鍊式 Promise 回傳:

function initPromise() {
  return new Promise((res, rej) => {
    res("initResolve");
  });
}

initPromise()
  .then((result) => {
    console.log(result); // "initResolve"
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("secondPromise");
      }, 1000);
    });
  })
  .then((result) => {
    console.log(result); // "secondPromise"
  });
登入後複製
鍊式 Promise 回傳:

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

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