rxjs Elegant продолжает получать и накапливать, пока hasNextPage = true - PullRequest
0 голосов
/ 13 мая 2019

Как сохранить результаты и накапливать их, пока активна нумерация страниц?

Мне не нравятся 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 Ответ

1 голос
/ 14 мая 2019

Не полностью протестировал его, но вы можете попробовать использовать 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)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...