2017-02-24 3 views
1

비동기 메서드에서 호출 될 때 클래스 인스턴스를 참조하는 방법입니다.es2017에서 비동기 메서드에서 액세스 할 때 'this'가 정의되지 않았습니다.

class Senders { 
    callSendAPI() { 
    //Some code here 
    } 
    sendText() { 
    this.callSendAPI(); 
    } 
    async sendCards() { 
    var dbpromise = await db.call(); 
    console.log('this= ', this); 
    this.callSendAPI(); 
    } 
} 
export {Senders}; 

이 정의되지 않은

+0

바벨 또는 다른 것을 사용하고 있습니까? –

+0

이면 해당 변환기의 불쾌한 버그처럼 들릴 수 있습니다. –

+7

'sendCards()'는 어떻게 불려지나요? 이 코드는'sendCards()'안에'this'의 값을 결정하기 때문에 보여줄 필요가 있습니다. 문제는 사용자가 표시하지 않는 호출 코드에서 발생할 가능성이 큽니다. 나는 obj.sendCards를 콜백으로 전달하고 그것이 작동하지 않는 이유를 추측 할 것이다. 내 추측이 맞다면 [클래스 스코프에서 "this this"로 콜백을하는 법] (http://stackoverflow.com/questions/15048775/how-to-get-callback-to-work-with-this)을 참조하십시오. - 클래스 - 범위/15048802 # 15048802). – jfriend00

답변

1

문제를 = 중 하나를 당신이 하나를 사용하는 경우, 사용, 또는 호출되는 방식 주어진 함수의 컨텍스트되는 어떤 transpiler에 있습니다. NodeJS v7.x에서 다음 스 니펫을 실행했으며이 값은 Senders의 클래스 인스턴스 였음을 보여 주면서 잘 동작했습니다.

당신이 당신의 transpiler 아니라고 판단되면

class Senders { 
 
    async sendCards() { 
 
    console.log('this= ', this); 
 
    } 
 
} 
 

 
new Senders().sendCards();

는, 당신은 함수를 호출 할 때 bind 또는 call/ apply를 사용하여 실행 컨텍스트를 제어하려고합니다.