如何在分页处于活动状态时保持获取结果并对其进行累积?
我既不喜欢i++
,也不喜欢totalResults
的副作用。
从请求到结果的映射既不优雅也不恰当。
有什么建议吗?
let i = 0;
const totalResults = [];
this.http.get('url?page=' + i).pipe(
map((data: any) => {
totalResults.push(...data.results)
if(data.hasNextPage) {
i++;
return throwError('FetchMore');
}
}),
retryWhen(
(errors:any) => errors.pipe(
map( (err: any) => { return err === 'FetchMore' ? of('another page available. retry') : throwError(err); }
)
)
)
答案 0 :(得分:1)
尚未完全测试,但您可以尝试
使用expand
递归调用http,直到达到特定条件为止
of([0, []]).pipe(expand(([i, result]) =>
this.http.get('url?page=' + i).pipe(
map(res => res.hasNextPage ? [++i, result.concat[res]] : false),
)),
takeWhile(res => res)
)