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

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

Mary-Kate Olsen
發布: 2024-11-28 15:05:13
原創
773 人瀏覽過

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

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