我想查詢一個回傳資料的 Api 和next包含下一個要呼叫的 url 的專案。
當next為空時,表示所有資料都已發送。
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 呼叫并連接結果呢?
uj5u.com熱心網友回復:
您可能想使用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))
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477812.html
標籤:javascript 有角度的 rxjs
