2016-06-27 20 views
0

내 페이지 constructor 클래스에서 값을 시작할 때 문제가 발생했습니다. provider을 호출하여 데이터를로드합니다. 내부 service 호출 데이터가 호출 된 것을 볼 수 있지만 서비스 호출 외부 변수를 호출했을 때는 undefined이라고합니다. 어떻게 된 거예요?서비스 제공자에게 전화 한 후 이오닉 2 정의되지 않은 값

HomePage.ts

export class HomePage { 
    public data: any; 
    constructor(private nav: NavController, private auth: Auth, private params: NavParams) { 
    this.auth.getProfile().then((profile) => { 
     this.data = profile; 
     console.log('here i can see data correctly ' + JSON.stringify(this.data)); 
    }) 
     console.log('here data undefined ' + JSON.stringify(this.data)); 
    } 

귀하가 제대로 작동 service

 getProfile(){ 
    return this.getToken().then((token) => { 
    // console.log(token); 
     if (token) { 
     return new Promise(resolve => { 
      var headers = new Headers(); 
      headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
      try { 
      this.http.get('http://laraveldev/api/users/get_user?token=' + token).subscribe(data => { 
       this.profile = data.json().data; 
       //console.log('getProfile ' + JSON.stringify(this.profile)); 
       resolve(this.profile); 
      }); 
      } catch (error) { 
      console.log(error); 
      this.data = { status: 'error' }; 
      resolve(this.data); 
      } 

     }); 
     } 
    }); 
    } 
+0

입니다 : 당신이, 인식하고하지 않는 것은 그 정보가 준비 사용 (당신에게 this.data 속성을 할당) 할입니다 데이터가 인쇄 된 것을 보았을 때 다음 콜백은 콜백 외부에 있으므로 명령문이 실행될 때까지 약속이 해결되지 않았을 수 있습니다. – wolverine

답변

2

auth.ts 제공. 당신은 왜

은 첫 번째 콘솔 로그는 약속 해결 콜백 내에서 기록
export class HomePage { 
    public data: any; 

    constructor(private nav: NavController, private auth: Auth, private params: NavParams) { 
    this.auth.getProfile().then((profile) => { 

     // Here you are inside the then(()=>{}) so your console log won't 
     // be executed immediately. This console.log() will be executed 
     // after the promise gets resolved (it's async) 
     this.data = profile; 
     console.log('here i can see data correctly ' + JSON.stringify(this.data)); 
    }) 

    // This console.log() is outside the promise callback, so this line 
    // will be executed immediately when you call the constructor, 
    // without waiting for the service to send the response (and without 
    // that being stored in the this.data variable). This is Sync. 
    console.log('here data undefined ' + JSON.stringify(this.data)); 
} 
+0

서버에서 데이터의 유효성을 검사하는 방법과이를 관리하는 방법을 의미합니까? – Zaza