我从angular2应用程序调用外部API,该应用程序以分页形式提供数据。响应看起来像这样
{
next: "next_url",
results: []
}
我可以使用Rxjs或Angular2的内置Http类(它返回一个observable)来连接下一个url的结果,直到
{
next: null,
results: []
}
我觉得我需要使用concatMap操作符,但我还没有想出语法,因为我不熟悉Reactive Extentions。
答案 0 :(得分:4)
答案 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
将每个页面的数据减少为单个结果数组。
注意:这不是我正在寻找的解决方案。因为它将每个页面结果作为数组发出,而不仅仅是最终数组。但发现这些有用的操作符很有意思。