私は以下のシナリオに直面しています。 Angled(2)で構築されたフロントエンドアプリがあり、http経由でアクセスできるRESTバックエンドに接続されています。 ユーザーがログインすると(電子メールとpwdを使用して)、バックエンドはユーザーに関連するデータ、特にユーザーに関連付けられたID(userId)と彼が住んでいる地域のコードを返しますこの地域IDと呼んでください)。 経由でuserId私はBack Endに問い合わせて、ユーザーが所属するアフィニティグループIDを取得できます(これをaffinityIdと呼ぶ)。 最後に、affinityIdとregionIdを使用して、バックエンドからの割引を取得してユーザーに適用することができます。角度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
が返す)は、affinityIdとregionIdの両方を持つことができるようにするため、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
:
すべてのヘルプは非常に多くのあなたは、このように、すべての操作を組み合わせることができ –