Код Senior Реализация с нуля обновлено

Постраничная загрузка как итератор

Условие

createPages(fetchPage): асинхронный итератор, отдающий элементы по одному, подгружая страницы по мере необходимости. fetchPage(cursor) возвращает { items, next }; next === null означает конец.

Что проверяют тесты

  • проходит все страницы

  • лениво: следующая страница не грузится заранее

  • одна страница

  • пустой результат

  • досрочный выход прекращает загрузку

Как подойти

Асинхронный итератор прячет пагинацию за обычным циклом: потребитель пишет for await и не знает про курсоры. Ленивость даётся бесплатно - генератор не двинется дальше, пока не попросят следующий элемент, поэтому досрочный выход экономит запросы. Тот же приём для чтения потока ответа, построчного разбора и бесконечной ленты.

Подсказки: 3
  1. Асинхронный генератор объявляется как async *Symbol.asyncIterator.
  2. yield отдаёт элемент и замирает до следующего запроса - отсюда ленивость.
  3. break в цикле for await закрывает генератор.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.