2016-12-22 6 views
0

실례합니다. 제 정확한 문제를 설명하려고 할 때 좀 더 어색하게 말하게 될 것입니다.약속 상태로 상태를 설정하다

나는 약속을 되 돌린다. 내가 할 그 좀 비동기 코드를 사용, 그리고 올바른 부울 값을 반환하고 있는지 확인하려면하기 때문에

내가 사용

return new Promise(function (resolve, reject) { 

로의 기반으로 약속을 해결하거나 거부 할 내가 이것은 내가 특정 기능이 ...있는 내가 "testFunction"그것은 예 경보가 해결되는지이 모두 .. 잘 작동

testFunction() 
      .then(function() { alert('Yes'); 

      }) 
      .catch(function() { alert('No'); 
      }); 

, 경우에 이름을 것을 호출 방법 다음이다 .. 내가 통과 루프에 을 찾을 수 경고하지 않습니다. No ...

그러나, 나는 내가 상태를 사용하여 다음과 같이 그렇게하려고 어떻게 든이의 결과를 저장해야합니다 약속이 해결되는지

testFunction() 
      .then(function() { alert('Yes'); 
       this.setState({ 
       value: true 
       }) 

      }) 
      .catch(function() { alert('No'); 
      }); 

는 기본적으로 단순히 사실과 상태를 설정. 그러나 내가 할 때 약속이 해결되지 않은 것처럼 .catch 함수도 실행됩니다.

나는 이것이 일종의 국가 자산이라고 가정하고 있습니까? 나는 이것이 왜 이렇게 작동하는지 이유를 알 수 없다. 이것에 대한 해결책이 있습니까? 감사!

+2

첫 번째 실수에 화살표 기능에 대한 자세한 내용을보실 수 있습니다 당신이 아닌 화살표 함수 내에서'this.setState'를 사용하고 있다는 점이다. '이 '는 당신이 생각하는 것이 아닙니다. – m0meni

+0

'this'는 무엇을 기대합니까? setState를 실행하려고하는 객체는 무엇입니까? - 코드는 그대로이고, this는 정의되지 않았거나'window' 객체입니다 - 둘 다'setState'를 가지고 있지 않습니다. 만약 당신이 catch를'.catch (function (e) {console.log (e);})로 변경하면, 브라우저 개발자 도구 콘솔에 에러가 무엇인지보아야합니다. –

+0

@JaromandaX this is tagged' 원시 '라고 가정합니다. 따라서 React 구성 요소를 가정합니다. – m0meni

답변

0

@FuzzyTree가 맞습니다. 난 그냥 당신은 또한 당신이 그들의 실행 컨텍스트를 바인딩하지 기능을 화살표 할 수있는 추가하고 싶었 :

testFunction() 
.then(() => { 
    alert('Yes'); 
    this.setState({value: true}); 
}).catch(() => { 
    alert('No'); 
}); 

화살표 기능 발현이 기능 식에 비해 짧은 구문이 자신을 구속하지 않고, 인수, super 또는 new.target입니다. 화살표 기능은 항상 익명입니다. 이 함수 표현식은 메소드가 아닌 함수에 가장 적합하며 생성자로 사용할 수 없습니다.

당신은 MDN site

관련 문제