Превращение разбитых на страницы запросов в наблюдаемый поток с RxJs

У меня есть сервис, который возвращает данные в страницах. Ответ на одну страницу содержит подробную информацию о том, как запросить следующую страницу.

Мой подход состоит в том, чтобы вернуть данные ответа, а затем немедленно объединить отложенный вызов в ту же наблюдаемую последовательность, если доступно больше страниц.

function getPageFromServer(index) {
  // return dummy data for testcase
  return {nextpage:index+1, data:[1,2,3]};
}

function getPagedItems(index) {
  return Observable.return(getPageFromServer(index))
    .flatMap(function(response) {
      if (response.nextpage !== null) {
        return Observable.fromArray(response.data)
          .concat(Observable.defer(function() {return getPagedItems(response.nextpage);}));
      }

      return Observable.fromArray(response.data);
    });
}

getPagedItems(0).subscribe(
  function(item) {
    console.log(new Date(), item);
  },
  function(error) {
    console.log(error);
  }
)

Это должен быть неправильный подход, потому что в течение 2 секунд вы получите:

      throw e;
            ^
RangeError: Maximum call stack size exceeded
    at CompositeDisposablePrototype.dispose (/Users/me/node_modules/rx/dist/rx.all.js:654:51)

Как правильно подходить к нумерации страниц?

Ответы на вопрос(4)

Ваш ответ на вопрос