2017-01-17 13 views
1

私は以下のシナリオに直面しています。 Angled(2)で構築されたフロントエンドアプリがあり、http経由でアクセスできるRESTバックエンドに接続されています。 ユーザーがログインすると(電子メールとpwdを使用して)、バックエンドはユーザーに関連するデータ、特にユーザーに関連付けられたID(userId)と彼が住んでいる地域のコードを返しますこの地域IDと呼んでください)。 経由でuserId私はBack Endに問い合わせて、ユーザーが所属するアフィニティグループIDを取得できます(これをaffinityIdと呼ぶ)。 最後に、affinityIdregionIdを使用して、バックエンドからの割引を取得してユーザーに適用することができます。角度HTTP要求の連結

  • getUserData(電子メール::文字列、PWD:文字列):他の言葉では、バックエンドは3つのAPIを提供しています

    のuserIdを含むすべてのユーザーデータを返すregionId

  • getAffinityPerUser(userIdを:number):affinityIdを表す数値を返します。
  • getDiscount(regionId:number、affinityId:number):ディスクを表す数値を返します。 ount

私は角度HTTPクライアントを経由して、これらのAPIにアクセスする場合、私は(Javascriptの疑似コードの一種で)次のAPIを構築することができます

  • getUserData(電子メール:文字列、PWD:文字列):観察可能(< {にuserId、 regionId、...}>)
  • getAffinityPerUser(のuserId:数):観測()
  • getDiscount(regionId:数、affinityId:数): 観測()

私が探しているのの割引情報を得るためにRxJs演算子を使用してObservablesを組み合わせることができるかどうかを知りたいと思います。

私は

this.getUserData(email, pwd) 
    .switchMap(userData => this.getAffinityPerUser(userData.userId)) 

のようなものでaffinityIdを取得するためにswitchMapを介して第1の2つのAPIを連結することができますが、その後、私はaffinityId観察可能(getAffinityPerUserによって返された)と結合する方法がわかりませんuserData Observable(getUserDataが返す)は、affinityIdregionIdの両方を持つことができるようにするため、getDiscount APIを呼び出す必要があります。私はあなたが検出し、あなたの `affinityId`と` regionId`はから入手可能な場合に観察する必要があると考えてい

this.getUserData(email, pwd) 
    .switchMap(userData => this.getAffinityPerUser(userData.userId) 
           .map(affinity => [affinity, userData.regionId])) // return a tuple combining required elements 
    .switchMap(([affinity, regiondId) => this.getDiscount(regionId, affinity)) // use destructuration to extract the 2 elements of the tuple 
+0

すべてのヘルプは非常に多くのあなたは、このように、すべての操作を組み合わせることができ –

答えて

2

を高く評価しています最後のHttp呼び出しを行い、 `discount`を取得します。だからあなたは、あなたがあなたが持っているすべてのデータを持っているときにユーザーがログインしてから最後のものを作るときに、それらの呼び出しを観察することができます。
+0

いいね、うまくいくはずです。 –

関連する問題