2015-12-05 56 views
41

我是Angular2和Http Observable的新手。我有一個調用Http服務並返回Observable的組件。比我訂閱該Observable並且它工作正常。如何在Angular2中鏈接Http調用

現在,我希望在該組件中,在調用第一個Http服務之後,如果調用成功,則調用其他Http服務並返回該Observable。因此,如果第一次調用不成功,那麼該組件將返回該可觀察對象,在它對面返回第二次調用的可觀察對象。

所以,問題是,鏈接Http調用的最佳方式是什麼?有沒有什麼優雅的方式,比如monads?

回答

67

可以使用mergeMap操作

先導入操作做法如下:

import 'rxjs/add/operator/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); 

一些更詳情在這裏:http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

關於mergeMap操作者的更多信息可以發現here

+5

具有角2.0(測試版0)需要以下: 進口「rxjs /添加/操作者/地圖」; import'rxjs/add/operator/mergeMap'; –

+0

這雖然執行得很好。每當我重新訪問路由時,http調用會被另外觸發2次。 ngOnInit(){ let counter1 = 0,counter2 = 0; console.log('MyBiraComponent ngOnInit'); let uk = this.us.get(); (person => { console.log('line 45:',++ counter1); return person.id; })。flatMap(id => { console.log 'line 48:',++ counter2); return this.bu.get(id); })。subscribe(res => {console.log(res); }); } ngOnDestroy(){ this.u.unsubscribe(); } – Prabhat

+0

在此處發佈此問題http://stackoverflow.com/questions/41087885/chained-rx-calls-called-multiple-times – Prabhat