I have a service which returns data in pages. The response to one page contains details on how to query for the next page.
My approach is to return the response data
Another one solution is to use retryWhen
getAllData() {
let page = 0;
let result = [];
const getOnePage = () => {
return of(0).pipe(mergeMap(() => getPaginatedData(page++)));
};
return getOnePage()
.pipe(
map(items => {
result = result.concat(items);
if (templates.length === PAGE_SIZE) {
throw 'get next page';
}
}),
retryWhen(e => e.pipe(
takeWhile(er => er === 'get next page'))
),
map(e => result)
)
.subscribe(items => {
console.log('here is all data', items);
});
}