Concat在angular2中使用Rxjs进行分页响应

时间:2015-12-31 07:31:48

标签: angular rxjs angular2-http

我从angular2应用程序调用外部API,该应用程序以分页形式提供数据。响应看起来像这样

{
   next: "next_url",
   results: []
}

我可以使用Rxjs或Angular2的内置Http类(它返回一个observable)来连接下一个url的结果,直到

{
   next: null,
   results: []
}

我觉得我需要使用concatMap操作符,但我还没有想出语法,因为我不熟悉Reactive Extentions。

2 个答案:

答案 0 :(得分:4)

我将如何做到这一点:

{{1}}

http://plnkr.co/edit/7r4TaW

答案 1 :(得分:1)

只是为了替代解决方案,这个也可以使用

getAllResults(startIdx = 0) {
  return this.getData(startIdx)
    .expand(data => {
      return data.next ? this.getData(data.next) : Observable.empty()
    }).scan((acc, data) => {
      return [...acc, ...data.results]
    }, []);

}

expand运算符递归调用内部observable。如果没有scan运算符,它将继续发出每个页面的数据。使用scan将每个页面的数据减少为单个结果数组。

注意:这不是我正在寻找的解决方案。因为它将每个页面结果作为数组发出,而不仅仅是最终数组。但发现这些有用的操作符很有意思。

http://plnkr.co/edit/vrZEywkeys6sa5Nsccbg?p=preview