【问题标题】:combine results of two http.get calls using rxjs使用 rxjs 组合两个 http.get 调用的结果
【发布时间】:2020-05-03 16:22:42
【问题描述】:

我调用了两个不同的 api(两个不同的在线商店),每个都返回相似的数据。两者都有一些分页信息以及嵌套的项目数组(订单列表)。我需要组合这些对象以按购买日期的顺序显示完整的项目列表。我还需要弄清楚如何维护分页数据,因为列表太大而无法完全拉入,所以我必须从两个调用中获取更多数据以填充后续页面。

我在 rxjs 中使用 angular。对象如下所示:

回应一:

```{
"startIx": 0,
"page": 1,
"orders":[
    {"orderNumber":"756984",
    "date":"2020-04-02",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":7.84,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
    }]},
    {"orderNumber":"756985",
    "date":"2020-04-03",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":8.54,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
        }]}],
"totalOrders":2
}```

回应二:

```{
"startIx": 0,
"page": 1,
"orders":[
    {"orderNumber":"756984",
    "date":"2020-04-02",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":7.84,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
    }]},
    {"orderNumber":"756985",
    "date":"2020-04-03",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":8.54,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
        }]}],
"totalOrders":2
}```

期望的结果是这样的,将来自响应 2 的所有订单添加到其中并更新总数..

```{
"startIx": 0,
"page": 1,
"orders":[
    {"orderNumber":"756984",
    "date":"2020-04-02",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":7.84,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
    }]},
    {"orderNumber":"756985",
    "date":"2020-04-03",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":8.54,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
    }]},
    {"orderNumber":"756984",
    "date":"2020-04-02",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":7.84,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
    }]},
    {"orderNumber":"756985",
    "date":"2020-04-03",
    "status":"ORDER_PARTIALLY_PROCESSED",
    "price":8.54,
    "links":[
        {"rel":"store.order",
        "href":"history.jsf"
    }]}],
"totalOrders":4
}```

我对 Angular 非常陌生,尤其是 rxjs 和 ngrx,所以我正在寻找一些关于组合列表的最佳方法的建议。

【问题讨论】:

  • 欢迎来到 StackOverflow!您所说的“合并列表”并不是特别清楚。您能否提供 2 个列表和预期输出的示例。也不清楚你为什么提到 ngrx - 这似乎与这里无关?
  • 欢迎@jenny,从您的问题中无法清楚地理解。但是我给出的一些答案可能会对您有所帮助。
  • 看看这个 (stackoverflow.com/a/59668717/10959940)!它有一个例子可以实现你想要做的事情
  • 非常感谢您花时间看我的问题。 @KurtHamilton,我已经更新了我的问题,以便更清楚地了解我正在寻找的结果,您可能是正确的,在这种情况下,ngrx 并不重要。
  • @user2089677 非常感谢您花时间回答我的问题。我现在试一试,我会告诉你进展如何。

标签: angular rxjs


【解决方案1】:
  1. 不同的 api(两个不同的在线商店)使用“forkjoin”
  2. 将这些对象组合起来显示

    1. forkJoin([api1, api2]).subscribe(response => {
    // response[0] is api1(response)
    // response[1] is api2(response)
    // 2. combine both response data to display
    });
    

sample-forkjoin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多