使用 rxjs 连接未确定的 api 调用
Concat undetermined api call using rxjs
我想查询 Api 那 returns dada 和 next
包含下一个 url 要调用的项目。
当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 调用并连接结果?
您可能想使用 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))
);
}
我想查询 Api 那 returns dada 和 next
包含下一个 url 要调用的项目。
当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 调用并连接结果?
您可能想使用 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))
);
}