当hasNextPage = true时,rxjs优雅地继续获取和累积

时间:2019-05-13 15:00:20

标签: rxjs

如何在分页处于活动状态时保持获取结果并对其进行累积?

我既不喜欢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); }
    )
  )
)

1 个答案:

答案 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)
)