【问题标题】:Concatenation of Angular http requestsAngular http请求的串联
【发布时间】:2017-06-01 19:28:42
【问题描述】:

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

换句话说,后端提供了 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()
  • getAffinityPerUser(userId: number) : Observable()
  • getDiscount(regionId: number, affinityId: number) : 可观察()

我想知道我是否可以使用 RxJs 运算符组合此类 Observable 以获得我正在寻找的 折扣 信息。

我可以通过 switchMap 连接前 2 个 API 以获取 affinityId 类似于

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

但是我不知道如何将 affinityId Observable(由 getAffinityPerUser 返回)与 userData Observable(由 getUserData 返回)结合起来,以便能够同时拥有 affinityId 和 regionId 我需要调用 getDiscount API。

非常感谢任何帮助

【问题讨论】:

  • 我相信您需要检测并观察您的affinityId 和regionId 何时可从将进行最后一次Http 调用以检索discount 的服务可用。因此,您可以在用户登录时观察这些调用,然后在您拥有所有数据时进行最后一次调用。

标签: angular rxjs angular2-http


【解决方案1】:

您可以像这样组合所有操作:

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

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2015-12-31
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多