在非同步程式設計中,async/await 功能可讓您在同步和非同步任務之間無縫切換。然而,在頂層執行非同步程式碼時,必須考慮一些因素。
當你定義一個非同步函數時,它會回傳一個 Promise。當您在頂層呼叫此函數時,它會立即傳回 Promise,而不是解析的值。這就是為什麼你的控制台在執行非同步任務之前輸出 Promise 物件。
要解決這個問題,你有幾個選項:
1。頂級等待(ES2022提案)
在現代環境中,您可以在模組中使用頂級等待。這允許您直接在模組範圍內等待 Promise。
const text = await main(); console.log(text); // Logs the resolved value
2.具有未處理拒絕的頂級非同步函數
您可以定義一個從不拒絕的頂層非同步函數。這可以防止未處理的拒絕錯誤,但不會明確處理錯誤。
(async () => { try { const text = await main(); console.log(text); // Logs the resolved value } catch (e) { // Error handling (optional) } })();
3. then() 和catch()
如果以上選項都不合適,可以使用Promise 的then() 和catch() 方法來處理結果。
main() .then((text) => { console.log(text); // Logs the resolved value }) .catch((err) => { // Error handling });
注意:在所有情況下,正確處理拒絕以防止未處理的拒絕錯誤非常重要。
以上是如何在 JavaScript 頂層正確執行非同步程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!