2017-01-14 8 views
0

getProfile()メソッドでコンソールにどのようにログされるのか分かりませんが、this.userをuserに割り当てるとjsonオブジェクトが返されません。だから、角2の結果へのクラス変数の割り当て

私がしなければ:コンソールにログインします

getProfile() { 
    this.userService.getPortInfo() 
     .then(user => { 
      console.log(user); 
     }); 
} 

。 しかし、私はない場合:

getProfile() { 
    this.userService.getPortInfo() 
     .then(user => { 
      this.user = user; 
     }); 
} 

、それは空の配列を返しますthis.userどこでもをCONSOLE.LOGしてみてください。私の目標は、this.userをgetProfile()の結果に割り当て、それを私のビューで使用することです。必ずしもそれをログアウトする必要はありません。

私はこの問題で私の記述を許してくれます。私はかなり新しい角度です。

export class UserService { 

/** 
* 
* @param http 
*/ 
constructor(public http: Http) { 
} 

getPortInfo() { 
    return this.http.get(environment.api) 
     .toPromise() 
     .then((response: Response) => response.json()) 
     .catch(this.handleError); 
} 

/** 
* 
* @param error 
* @returns {ErrorObservable<T>} 
*/ 
private handleError(error: Response | any) { 
    let errMsg: string; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body.error || JSON.stringify(body); 
     errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
    } else { 
     errMsg = error.message ? error.message : error.toString(); 
    } 

    return Observable.throw(errMsg); 
} 

}

export class HomeComponent implements OnInit { 

user: User[] = []; 

constructor(private userService: UserService) { 
} 

getProfile() { 
    this.userService.getPortInfo() 
     .then(user => { 
      console.log(user); 
     }); 
} 

ngOnInit() { 
    this.getProfile(); 

    console.log(this.user); 
} 

_setUser(user) { 
    return this.user = user; 
} 

}

+0

のようにコードを修正し、インポート

import 'rxjs/add/operator/do'; 

を含めるようになりますオペレータの操作を行い/ rxjsを使用するためにあなたを示唆しているであろうreturn this.user' – rachmatsasongko

+0

これは動作しません:getProfile(){ this.userService.getPortInfo() .then(ユーザー=> { return this.user = user; }); } – GrassRoot

+0

observableを試してみて、angle2があなたに指示する方法である結果を購読してください。多くの点で約束より優れています。サービスから観測可能なものを取得し、それを使用したいクラスに登録します。 –

答えて

0

あなたgetPortInfo()方法は、(それは約束を返す)非同期であり、およびJavaScriptコンパイラは約束の結果を待たない、それだけよ次のコード行を実行してください(あなたの場合は、console.log()です。

正しい方法は、から約束を返すことです。方法:

getProfile() { 
    return this.userService.getPortInfo() 
     .then(user => this.user = user); 
} 

との約束が解決した後にのみconsole.log()を呼び出すためngOnInit()使用.then中:

ngOnInit() { 
    this.getProfile() 
     .then(() => console.log(this.user)); 
} 

console.log()たちは約束から結果を取得した後にのみ実行される方法。

+0

core.umd.js:3491 EXCEPTION :Uncaught(約束):エラー:0:0原因:未定義のプロパティ 'then'を読み取ることができません:ngOnInit(){ this.getProfile()。then(()=> console.log(this。ユーザー)); } – GrassRoot

+0

@GrassRootあなたの問題をテストするための最小限のプランナーを提供できますか? –

0

私が代わりに

の下に最初にあなたが忘れてしまった

getProfile(): Observable<User[]> { 
     return this.userService.getPortInfo() 
     .then(user => {this.user = user;}) 
      .do(data => console.log("user data " + user)) 
       .catch(this.handleError); 

    } 
    private handleError(error: Response) { 
      console.log(error); 
      return Observable.throw(error.json().error || 'Internal Server error'); 
    } 
関連する問題