首頁 >web前端 >js教程 >為什麼 Async/Await 函數總是回傳 Promise?

為什麼 Async/Await 函數總是回傳 Promise?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-28 15:05:13797瀏覽

Why Do Async/Await Functions Always Return Promises?

非同步/等待:揭開Promise 的神秘面紗

當開始使用非同步/等待功能時,人們可能會遇到一個有趣的難題。看來非同步函數總是傳回 Promise 對象,導致在嘗試直接控制台日誌記錄時出現混亂。

讓我們更深入地研究這種現象並揭開其複雜性。每個非同步函數都遵循 Promise 範式,傳回一個封裝操作結果的 Promise 物件。 wait 語句用作暫停函數執行的一種方法,直到 Promise 解析或拒絕。

雖然人們可能認為 wait 會自動解開 Promise,但事實並非如此。使用await只會導致函數等待並隨後傳回一個立即解析的Promise。然而,需要使用await或.then()明確解包Promise才能存取實際結果。

為了說明這一點,請考慮以下模擬非同步請求的程式碼片段:

const getJSON = async () => {
  const request = () => new Promise((resolve, reject) => (
    setTimeout(() => resolve({ foo: 'bar'}), 2000)
  ));

  const json = await request();
  return json;
};

如果嘗試直接控制台記錄結果,輸出將是一個Promise:

console.log(getJSON()); // returns Promise

但是,使用.then() 解開Promise 會顯示預期的JSON物件:

getJSON().then(json => console.log(json)); // prints { foo: 'bar' }

總之,非同步函數總是傳回 Promise,而 wait 只是暫停執行直到解決。要獲得結果,需要使用await 或.then() 進行顯式解包。這種機制確保了 Promise 模型的完整性,並防止在允許直接存取 Promise 結果時可能出現的不可預測的行為。

以上是為什麼 Async/Await 函數總是回傳 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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