構造函數中的非同步呼叫:不可能的努力
使用async/await 進行非同步程式設計已經變得司空見慣,但它在構造函數中的應用引起了人們的關註一個有趣的挑戰。考慮以下程式碼片段:
不幸的是,此程式碼失敗並顯示錯誤訊息:
類別建構子可能不是非同步方法
原因是基本原理:建構函數負責初始化和傳回物件實例。然而, async 關鍵字將函數轉換為 Promise 產生器,導致函數傳回 Promise 而不是物件本身。這就產生了內在的衝突。
揭示不可能
這種誤解源自於 async/await 和 Promise 之間的相似性。雖然 async/await 提供了處理 Promise 的語法糖,但它不會改變底層行為。 Promise 表示解析或拒絕產生值的非同步操作。
相反,建構子必須傳回正在建構的物件。這種不可變的要求無法與非同步函數的承諾生成行為相協調。
解決方法
要克服此限制,請考慮使用以下設計模式之一:
請注意,雖然上面的範例在建構器模式中使用承諾,但也可以使用回調。
靜態函數注意事項
需要注意的是 this 關鍵字靜態函數內並沒有引用實例化對象,而是引用類別本身。因此,您不能直接在靜態函數中呼叫方法。相反,使用類別名稱引用方法或將它們聲明為靜態方法。
以上是為什麼 JavaScript 建構函式中不能使用 Async/Await?的詳細內容。更多資訊請關注PHP中文網其他相關文章!