2016-05-13 9 views
2

私はJwtServiceというサービスを持っています。このサービスには、ユーザーデータを取得するメソッドがあります。私は私のコンポーネントでこのメソッドを呼び出します。他のコンポーネントからのhttp.getが終了した後の角2実行メソッド

this.JwtService.getUserData(); 

、私は私のコンポーネントのボタンをクリックしたときに - 私は、このメソッドを呼び出します。

this.updateMoves(); 

JwtServiceサービスのデータに動作します: このメソッドが呼び出された後、私は別のローカルメソッドを呼び出します。

this.JwtService.getUserData();は、新しいデータの実行と更新が完了しておらず、古いデータでthis.updateMoves();が実行されていません。

不要なソリューション:サービスにupdateMoves()方法を移動し、応答が受信された後、それを呼び出してそれを動作させることができますが、この方法で以来、私はしたいが、それをしない、特定の一つの成分に属しています。

不要な解決策2:新しいサービス変数IS_LOADEDを読み込み、読み込みが完了したら自分のコンポーネントをチェックインします。それは私のアプリでいくつかの問題が発生します。

サービスデータを受信した後にupdateMoves()を実行すると思われるその他のソリューションはありますか?

マイgetUserData()メソッド:

getUserData() 
    { 
     this.good = false; 
    if (this.getToken()) { 
    this.http.get('user/info?token='+this.getToken()) 
     .map((res:Response) => res.json()) 
     .subscribe(
     data => { 
      this.userData = data.user; 
      this.LOADED = true; 
     }, 
     err => { this.checkToken(err); } 
    ); 
    } 
} 
+0

あなたはそれの後に他のすべてを実行することができますので、あなたは、あなたの 'getUserData()'メソッドから観測を返すことができ – shershen

+0

が何が起こっているかを推測、ポストにあなたのComponentクラスのコードとデコレータを追加ハードトップなければなりません成功した。 – rinukkusu

答えて

3

あなたgetUserData方法が観測を返す場合、あなたはそれを購読すると、関連するコールバックで第二の方法を実行できます。

this.JwtService.getUserData().subscribe(() => { 
    this.updateMoves(); 
}); 

編集

docatch演算子を使用できます:

getUserData() { 
    this.good = false; 
    if (this.getToken()) { 
    return this.http.get('user/info?token='+this.getToken()) 
     .map((res:Response) => res.json()) 
     .do(
     data => { 
      this.userData = data.user; 
      this.LOADED = true; 
     }) 
     .catch(
     err => { this.checkToken(err); } 
    ); 
    } else { 
    return Observable.throw('Not good'); 
    } 
} 
+0

私は 'userData'という名前の変数をアプリケーション全体に渡って使用していますが、observableを返すメソッドを変更すると' userData'変数が更新されず、各コンポーネント、それは悪い考えのように思える。私の現在の 'getuserdata'メソッドを見てください – TheUnreal

+0

あなたのメソッドを共有してくれてありがとう。あなたは代わりに 'do'と' catch'演算子を利用することができます。私は私の答えをudpated ... –

+0

素晴らしいありがとう!私が 'getUserData()'を実行した後にコードを実行したくない場合は、大括弧{}を空白のままにするか、これを行うよりクリーンな方法がありますか? – TheUnreal

関連する問題