2017-06-22 16 views
3

私は角度4コードからWebサービスを呼び出し、応答に加入しています。応答が来たら、私はそれを解析し、解析された情報を使用して別のWebサービスを呼び出す必要があります(そして、再度応答に登録してください)。角4連鎖購読

Rxjs購読を使用してこの連鎖を達成するにはどうすればよいですか。

以下のコードでは、顧客のWebサービスを呼び出してピンコードを取得しています。私がそれを得ると、ピンコードを入力として2番目のレストサービスを呼び出す必要があります。

fetchCoordinates() { 

    this.myService.get('http://<server>:<port>/customer') 
     .subscribe(
     (response: Response) => { 

     let pinUrl = JSON.parse(response.text()).items[0].pin; 
     // Take the output from first rest call, and pass it to the second call 
     this.myService.get(pinUrl).subscribe(
      (response: Response) => { 
      console.log(response.text()); 
      } 
     ) 
     }, 
     (error) => console.log('Error ' + error) 
    ) 
    } 

これはサブスクライブする正しい方法ですか?私は2番目のサービスの結果が戻ってからもう一度Webサービスを行う必要があります。コードブロックをさらにネストすることになります。これは、これだけ1がサブスクライブありflatMapを使用してきれいになります

+1

あなたが正しくそれを行っています!何が問題ですか? –

+0

ネストされたコードブロックを作成するのと同じ方法であるかどうかを確認したい。これを反映するために質問を更新しました。 – kayasa

答えて

5

this.myService.get('http://<server>:<port>/customer') 
.flatMap((response: Response) => { 
    let pinUrl = JSON.parse(response.text()).items[0].pin; 
    return this.myService.get(pinUrl); 
}) 
.subscribe((response: Response) => { 
    console.log(response.text()); 
}); 

を本当に何flatMap理解するために、このを見てみましょう:https://blog.thoughtram.io/angular/2016/01/06/taking-advantage-of-observables-in-angular2.html

+1

'flatMap'について少し説明するか、この種の解決策を探している人に役立つように役に立つリンクを提供してください。 – SaiUnique