在構造函數中的asynchronous調用:不可能的eardeavor
因錯誤消息而失敗:類構造函數可能不是async方法,構造函數函數負責初始化和返回對象實例。但是,異步關鍵字將函數轉換為承諾生成器,從而導致函數返回承諾而不是對象本身。這產生了固有的衝突。
揭示了不可能[誤解是源於async/等待和承諾之間的相似性。雖然異步/等待提供句法糖來處理承諾,但它不會改變潛在的行為。承諾代表解析或拒絕產生值的異步操作。
相比之下,構造函數函數必須返回正在構造的對象。這個不變的要求不能與異步函數的有望產生的行為進行調和。customElements.define('e-mail', class extends HTMLElement { async constructor() { super() let uid = this.getAttribute('data-uid') let message = await grabUID(uid) const shadowRoot = this.attachShadow({mode: 'open'}) shadowRoot.innerHTML = `var myobj = new myClass(); myobj.init(function(){ //在這裡您可以使用Myobj });:不要直接調用構造函數,而是使用構建器函數創建對象實例。構建器函數返回一個承諾,一旦所有異步任務完成。
myClass.build()。然後(function(function(myobj){ // MYOBJ由承諾歸還,而不是由構造函數或構建器歸還 }); //與異步/等待: 異步函數foo(){ var myobj =等待myclass.build(); }注意,雖然上面的示例使用構建器模式的承諾,但也可以使用回調。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3