2017-10-17 4 views
0

약속 및 다음 블록에 몇 가지 문제가 있습니다.블록 내의 클래스 함수 사용

기본적으로 다음 블록에서 aFunction(x)에 액세스 할 수 없습니다.

왜 이런가요? 내 코드는 다음과 같이 보입니다 :

class myClass { 

    aFunction(x) { 
    ... 
    } 

    bFunction(y) { 
    return new Promise(function (resolve, reject) { 
     request(options, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      resolve(body.token) 
     } else { 
      console.log('ERROR: ' + err) 
      return reject(false) 
     } 
     }) 
    }).then(function(res){ 
     this.aFunction(res) 
    }) 
    } 

} 

그리고 제가 실제로 약속 블록이 필요한가요?

+1

'this.aFunction (rest)'=>'aFunction (res)'? – marekful

답변

1

당신은 구명에 상황에 맞는 화살표 기능을 사용할 수 있습니다 :

.then(res => { 
    this.aFunction(res) 
}); 

을 또는 당신은 then에 직접 aFunction을 통과 가능성이 컨텍스트를 유지하기 위해 bind를 사용할 수 있습니다.

.then(this.aFunction.bind(this)); 

아니면 컨텍스트 유지하기 위해 변수를 사용할 수 있습니다 :이 경우

var self = this; 
... 
.then(function(res){ 
    self.aFunction(res) 
}) 

을 :

.then(function(res){ 
    this.aFunction(res) 
}); 

this 더 이상 클래스의 인스턴스를 참조, 그것은을 의미 익명 함수는 then 함수에 매개 변수로 전달되거나 설정된 모든 컨텍스트에 전달됩니다.

+1

위대한 그 worls. 그러나 내 이해를 위해 왜 처음에는 컨텍스트가 손실 되었습니까? – userMod2

+0

@ userMod2 내 대답을 편집하여 무슨 일이 일어나는지 설명하려고합니다. – Titus

+0

많은 감사. 또한 - 그 약속 - 그것은 그것을 실제적으로 요구했습니다. – userMod2