非同步/等待:揭開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中文網其他相關文章!