매우 간단한 코드가 있지만 이해할 수 없습니다.Angular2 약속에 대해 혼란 스럽습니다.
내가 현재 사용자 이름을 반환하는 서비스를
그래서 나는 웹 페이지에서 사용자 이름과 디스플레이를 기록 얻을 다음을 수행하고있다. 현재 로그인 한 사용자는 "데모"입니다.
this.userData.getUsername().then(value => {
this.username = value ;
console.log("Inside -->" + value);
});
console.log("Outside -- >" + this.username);
이제이 코드를 실행할 때입니다. 나는이 CONSOLE.LOG의 출력
Outside -- >undefined Inside -->demo
Shoulnd't 두 경우에이 디스플레이 '데모'이다 this.username
에 이름을하지 않습니다. (내부 및 외부) 외부가 정의되지 않은 이유는 무엇입니까 ??
이해해주세요.
호출이 비동기이기 때문입니다. 그것은'getUsername()'메소드를 실행하기 시작했지만, 실행되는 동안 계속 진행됩니다. 그래서 그것은 외부 로그를 먼저 쳐서,'this.username'이 아직 정의되지 않은 상태에서 메소드가 끝나면 내부 로그를 얻습니다. –
Angular 2와 관련이 없습니다. 이것은 비동기 호출이 작동하는 방식입니다. [https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests) –