2016-07-28 6 views
2

가 나는 상기 방법Angular2 첫 번째 응답은 요청

onLogin() { 
    this._service.postData().map(res => res.json()).subscribe(
    data => { this.loggedin = data }, 
    err => { console.log(err); } 
); 

    console.log(this.loggedin); 
} 

문제가 처음에에게 호출 다른 성분으로부터 그 다음 POST 요청

postData(){ 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    var json = JSON.stringify({email: 'Admin', password: 'Admin'}); 

    return this._http.post('http://localhost:8080/addressbook_rest/api/v1/contacts/login', json , 
    {headers: headers}); 

} 

하게하는 간단한 방법이 정의되지 게시 할 이 this.loggedin 변수는 정의되지 않았지만 그 후에는 원하는 것을 얻습니다 (this.loggedin = true). 왜 두 번째 시간부터 만 가져올 지 모르겠습니다.

답변

2

실제로 요청이 비동기 적으로 처리되기 때문입니다. 즉, console.log(this.loggedIn);은 subscribe 콜백 외부에 있으므로 처음으로 undefined를 반환합니다. 요청 응답을 받기 전에 실행됩니다.

당신은 그런 일을 사용해야합니다

onLogin() { 
    this._service.postData().map(res => res.json()).subscribe(
    data => { 
     this.loggedin = data; 
     console.log(this.loggedin); // <------- 
    }, 
    err => { console.log(err); } 
); 
} 
+0

하지만 IF에서 POST 후 this.loggedin이 필요합니다. 거기에있는 this.logged의 가치를 가지려면 어떻게해야합니까? 만약 (! this.loggedin) {this.errorMsg = '로그인 실패';} – mlhack

+0

첫 번째 문제를 해결하기 위해'loggedIn' 속성을'false'로 초기화 할 수 있습니다. 그렇지 않으면 응용 프로그램을 비동기 적으로 생각해야합니다. 나는 당신의 코드를 정확히 모르지만 다음과 같은 것을 보게 될 것이다 :'this._service.login (this.user) .subscribe (loggedIn => {if (! loggedIn) {this.errorMsg = '로그인 실패' ;}}); '내가 무슨 뜻인지 알아? –

1

후 요청이 비동기 때문이다. 구독 기능 또는 내부지도 기능에서 this.loggedin을 확인해야합니다. console에 인쇄 할 때 this.loggedin에 아무 것도 저장되지 않습니다. 성공적으로 ajax 호출을하면 업데이트됩니다.

이 서비스를 참조하십시오. here 귀하의 문제를 해결하는 데 도움이되기를 바랍니다.


dragon.service.ts

이 성공적으로 약속의 콜백입니다 .then()을 사용하여 POST 후를 확인하십시오. 아약스 호출이 반환 될 때 실행됩니다. 거기에는 console.log()가 있어야합니다.

+0

내 프로젝트를 Github에서 다운로드 할 수 있습니다. POST 및 GET 요청과 함께 작동합니다. https://github.com/khanstudio-github/Angular2AppASPNet 최종 코드 또는 오류를 알려 주실 수 있습니까? 오류를 쉽게 디버그 할 수 있습니다. –

관련 문제