我面临以下情况。 有一个使用 Angular(2) 构建的前端应用程序,它与可通过 http 访问的 REST 后端连接。 用户登录(使用电子邮件和密码)后,后端会返回与用户相关的数据,特别是与用户关联的 ID(我们称之为 userId)以及所在区域的代码他还活着(我们称之为regionId)。 通过userId,我可以查询后端以获取用户所属的关联组ID(我们称之为affinityId)。 最后,使用 affinityId 和 regionId 我可以从后端检索要应用于用户的折扣。
换句话说,后端提供了3个API:
- getUserData(email: string, pwd: string):返回所有用户数据,包括 userId 和 regionId
- getAffinityPerUser(userId: number):返回代表 affinityId 的数字
- getDiscount(regionId: number,affinityId: number):返回代表折扣的数字
如果我通过 Angular http 客户端访问这些 API,我可以构建以下 API(以某种 Javascript 伪代码的形式)
- getUserData(email: string, pwd: string) : Observable(<{userId, 区域 ID,...}>)
- getAffinityPerUser(userId: number) : Observable()
- getDiscount(regionId: number,affinityId: number) : 可观察()
我想知道是否可以使用 RxJs 运算符组合此类 Observables 来获取我正在寻找的折扣信息。
我可以通过 switchMap 连接前 2 个 API 来获取 affinityId ,例如
this.getUserData(email, pwd)
.switchMap(userData => this.getAffinityPerUser(userData.userId))
但是我不知道如何将 affinityId Observable(由 getAffinityPerUser
返回)与 userData Observable(由 getUserData
返回)结合起来为了能够同时拥有 affinityId 和 regionId,我需要调用 getDiscount API。
非常感谢任何帮助
最佳答案
您可以像这样组合所有操作:
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
关于angular - Angular http 请求的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702140/