2017-08-22 2 views
0

3つの関数と1つのボタンがあります。私は私がしたい何onPost,onGetnavigate機能 を持っているボタンを押すと同時に3 functionをしませ呼びたいが、次々ので、各機能は、他の(前の関数)まで待機いくつかの関数を呼び出す方法は、Angular2でお互いに待ち合わせます。

を完了していますISTは、私は現在のクライアントのデータを送信する私のonPost方法は、

onPost() { 
    const messageForDb = (JSON.stringify(this.model)); 
    localStorage.setItem('userKey', messageForDb); 
    this._httpService.postJSON(this.model) 
     .subscribe(
     data => this.postData = JSON.stringify(data), 
     error => alert(error), 
    ); 
    } 
をバックエンドにされた機能ここで allTogether

allTogether() { 

this.onPost(); 
this.onGet(); 
this.navigate(); 

} 

を呼び出すために行います

は、ここに私のonGet()であり、ここで私は私のクライアントに関する情報を取得するので、私は、私が購読してみましたnavigation()

onGet() { 
     this._httpService.getCurrentState(this.model.user_email, this.model.client) 
     .subscribe(
     // data => this.getData = JSON.stringify(data), 
     data => this.getData = data, 
     error => alert(error), 
    ); 
    } 

navigation() { 
    let part = json.message.part; 
    let num = json.message.number; 
    this.router.navigate(['part'], {queryParams: {'number': 'num'}}); 
} 

第三の機能で、後でそれを使用することができますが、失敗した...ので、私は機能を実装する方法クラウドallTogether()それ以外は?私はすべての関数をテストし、別々に動作しますが、すべて一緒になります。

答えて

1

データを割り当てるサブスクライブ関数の部分から次のメソッドを呼び出すだけで済みます。

onPost() { 
    const messageForDb = (JSON.stringify(this.model)); 
    localStorage.setItem('userKey', messageForDb); 
    this._httpService.postJSON(this.model) 
     .subscribe(
      data => { this.postData = JSON.stringify(data); this.onGet();}, 
      error => alert(error), 
); 
} 

onGet() { 
    this._httpService.getCurrentState(this.model.user_email, 
    this.model.client) 
     .subscribe(
     // data => { this.getData = JSON.stringify(data); this.navigate(); }, 
     data => { this.getData = data; this.navigate(); }, 
     error => alert(error), 
); 

}

2

あなたが、私はそれらの間のデータを参照してください最初の2の結果のための第3の機能待機を作るためにObservable.forkJoin演算子を使用することができますが、相互に依存しません。 onPostonGetを変更して、observablesを返さなければなりません。

onPost() { 
    const messageForDb = (JSON.stringify(this.model)); 
    localStorage.setItem('userKey', messageForDb); 
    return this._httpService.postJSON(this.model); 
} 

onGet() { 
     return this._httpService.getCurrentState(this.model.user_email, this.model.client); 
    } 

Observable.forkJoin([this.onPost(), this.onGet()]) 
    .subscribe((resultArray) => { 
    [postResult, getResult] = resultArray; 
    this.postData = JSON.stringify(postResult); 
    this.getData = getResult; 
    this.navigation(); 
    }); 
関連する問題