首頁 >web前端 >js教程 >JavaScript 中的 async/await 是否總是回傳 Promise,為什麼?

JavaScript 中的 async/await 是否總是回傳 Promise,為什麼?

Barbara Streisand
Barbara Streisand原創
2024-12-12 11:54:10810瀏覽

Does async/await in JavaScript Always Return a Promise, and Why?

async/await:Promise 揭曉

Promise 是 JavaScript 中非同步程式設計的基本面向。當涉及 async/await 時,重要的是要揭開非同步函數總是傳回 Promise 的概念。

await 關鍵字放置在返回 Promise 的函數呼叫之前,會暫停當前函數的執行,直到Promise 要么被解決,要么被拒絕。然而,這次暫停並沒有解除承諾。 Promise 的結果仍然封裝在傳回的 Promise 物件中。

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

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

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

呼叫 getJSON() 時,它會傳回a Promise,因為await語句只是暫停執行直到請求完成:

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

相反,當連結.then(),Promise的結果終於暴露了:

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

為什麼不能用console .log(getJSON())繞過Promise包裝?這是 Promise 的基本屬性。 Promise 代表非同步操作,在解決或拒絕之前,它們的結果是未知的。有意禁止對結果的外部訪問,以確保 Promise 仍然是結果的唯一中介。

請記住,async/await 透過在遇到 Promise 時暫停執行來使使用 Promise 變得更加方便,但它並沒有無需解開 Promise 來訪問其結果。

以上是JavaScript 中的 async/await 是否總是回傳 Promise,為什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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