我面临以下情况。 有一个前端应用程序,使用Angular(2)构建,与REST后端连接,可通过http访问。 一旦用户登录(使用电子邮件和密码),后端将返回与用户相关的数据,特别是与用户关联的ID(让我们称之为 userId )以及其中的区域代码他活着(让我们称之为 regionId )。 通过 userId ,我可以查询后端以获取用户所属的关联组ID(让我们称之为 affinityId )。 最后,使用 affinityId 和 regionId ,我可以从后端检索折扣以应用于用户。
换句话说,后端提供3个API:
如果我通过Angular http客户端访问这些API,我可以构建以下API(在一种Javascript伪代码中)
我想知道我是否可以使用RxJs运算符组合这些Observable来获取我正在寻找的折扣信息。
我可以通过switchMap连接前两个API,以获得 affinityId ,类似
this.getUserData(email, pwd)
.switchMap(userData => this.getAffinityPerUser(userData.userId))
但后来我不知道如何将 affinityId Observable(由getAffinityPerUser
返回)与userData Observable(由getUserData
返回)结合起来,以便能够同时使用我需要调用getDiscount API的 affinityId 和 regionId 。
非常感谢任何帮助
答案 0 :(得分:3)
您可以将所有操作组合在一起:
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