2015-12-05 9 views
41

Angular2とHttp Observableの新機能です。私はHttpサービスを呼び出し、Observableを返すコンポーネントを持っています。そのObservableを購読するよりもうまくいきます。呼び出しが成功であればAngular2でHTTPコールをチェーンする方法

今、私が欲しい、そのコンポーネントでは、最初のHTTPサービスを呼び出した後、他のHTTPサービスを呼び出し、その観測を返します。したがって、最初の呼び出しが成功しなかった場合、コンポーネントはObservableを返し、反対に2番目の呼び出しをObservableに返します。

質問ですが、Httpコールをチェーンする最良の方法は何ですか?例えばモナドのようなエレガントな方法はありますか?

答えて

67

あなたは次のようにオペレータmergeMapオペレータ

まずインポートを使用してこれを行うことができます。

this.http.get('./customer.json') 
      .map((res: Response) => res.json()) 
      .mergeMap(customer => this.http.get(customer.contractUrl)) 
      .map((res: Response) => res.json()) 
      .subscribe(res => this.contract = res); 

いくつかの詳細:

import 'rxjs/add/operator/mergeMap';

を次に、ここでは、次の2つの呼び出しをチェーンする方法です詳細はこちら:http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

mergeMap演算子の詳細は、here

+5

となります。角度2.0(ベータ0)の場合、次のものが必要です: 'rxjs/add/operator/map'; 'rxjs/add/operator/mergeMap'をインポートします。 –

+0

これは完璧に実行されますが。私がルートに再訪するたびに、httpコールはさらに2回発砲されます。 ngOnInit(){ let counter1 = 0、counter2 = 0; console.log( 'MyBiraComponent ngOnInit'); let uk = this.us.get(); let this.u = uk.map(人=> { はconsole.log( '線45'、++カウンタ); リターンperson.id; })flatMap(ID => { はconsole.log(。 (res => { console.log(res); });;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; } ngOnDestroy(){ this.u.unsubscribe(); } – Prabhat

+0

これを質問として投稿しました。http://stackoverflow.com/questions/41087885/chained-rx-calls-called-multiple-times – Prabhat

関連する問題