在构造函数中的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