생성자 내의 비동기 호출 : 불가능한 노력
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 = `
비동기 프로그래밍은 평범 해졌지만 구조적 기능 내에서의 응용 프로그램은 흥미로운 문제가 발생합니다. 다음 코드 스 니펫을 고려하십시오 :customElements.define ( '이메일', 클래스는 htmlelement {확장됩니다. 비동기 생성자 () { 감독자() uid = this.getAttribute ( 'data-uid') 메시지 = Grabuid (uid)를 기다립니다. const shadowroot = this.attachshadow ({mode : 'open'}) 섀도우 루트 .innerhtml =`
불행히도,이 코드는 오류 메시지와 함께 실패합니다. 그러나 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 (). // MyOBJ는 생성자 나 빌더가 아닌 약속에 의해 반환됩니다. }); // Async/Await : 비동기 함수 foo () { var myobj = myclass.build (); }
myClass.build().then(function(myObj) { // myObj is returned by the promise, not by the constructor or builder }); // with async/await: async function foo () { var myObj = await myClass.build(); }Static Function ConsiderationsIt is important to note that the this keyword within static functions does not refer to the instantiated object but to the class itself. 따라서 정적 함수 내에서 직접 메소드를 호출 할 수 없습니다. 대신, 클래스 이름을 사용하는 메소드를 참조하거나 정적 메소드로 선언합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3