angular - Angular http 请求的串联

标签 angular rxjs angular2-http

我面临以下情况。 有一个使用 Angular(2) 构建的前端应用程序,它与可通过 http 访问的 REST 后端连接。 用户登录(使用电子邮件和密码)后,后端会返回与用户相关的数据,特别是与用户关联的 ID(我们称之为 userId)以及所在区域的代码他还活着(我们称之为regionId)。 通过userId,我可以查询后端以获取用户所属的关联组ID(我们称之为affinityId)。 最后,使用 affinityIdregionId 我可以从后端检索要应用于用户的折扣

换句话说,后端提供了3个API:

  • getUserData(email: string, pwd: string):返回所有用户数据,包括 userIdregionId
  • 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 返回)结合起来为了能够同时拥有 affinityIdregionId,我需要调用 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/

相关文章:

angular - Ionic 3 中虚拟 VS 无限滚动的区别和用例

javascript - 如何在执行期间使用 rxjs 向 Inquirer JS 动态添加问题?

javascript - 您在需要流的地方提供了一个无效对象。您可以提供 Observable、Promise、Array 或 Iterable

Angular 2 HTTPS 请求

javascript - 响应中的 Angular 2 http 更改值不影响页面

Angular 6 - 单击或焦点时调用函数

javascript - 社交媒体视频列表中的视频播放器损坏

angularjs - Angular2种子: npm start has gulp error

angular - 从 Angular 2 中的组件代码访问模板中异步管道的结果

javascript - 在 Ionic 3 中使用 Http 获取 JSON 数据