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