我想查询一个返回dada 和包含下一个要调用的url 的next
项的Api。
当 next
为 null 时,表示所有数据都已发送。
getData(url?: any) {
if (!url) {
url = `https....../geojson/geo/?srid=xxx&code=xx&jsonb_as_text=false&page_size=10`;
}
return this.httpClient.get(url, { headers }).pipe(
flatMap((res: any) => {
if (res.next) {
this.getData(res.next);
}
return res;
})
);
}
实际上,该组件只得到第一次调用,而不是第二次调用。
我怎样才能很好地链接 api 调用并连接结果呢?
回答1
您可能想要使用 expand
运算符。它是递归的 - 每个响应都会调用操作员回调。您可以使用 toArray
将所有响应收集为一个数组。您可以使用 scan
或不使用运算符来处理其他正在加载的即时结果。
getData(url) {
return this.httpClient.get(url, { headers })
}
getAllData() {
const url = `https....../geojson/geo/?srid=xxx&code=xx&jsonb_as_text=false&page_size=10`;
return this.getData(url).pipe(
expand((res: any) => {
if (res.next) {
return this.getData(res.next);
}
return EMPTY;
}),
toArray(),
map(responses => responses.flatMap(response => response.items))
);
}