Я немного об этом подумал, и я не могу найти разумного решения о том, как это сделать. Оператор проблемы прост - напишите генератор, который будет лениво разбивать удаленный набор данных. Чтобы упростить вещи, это в идеале я хотел бы для пользователя моей библиотеки увидеть:Правильное использование с генераторами ES6 и разбиением на страницы
for (var user of users()) {
console.log(user);
}
Я не совсем, кажется, чтобы получить генератор работать. Я думал, что логика так будет работать, но я не могу понять, как ее реализовать.
function* users() {
while (canPaginate) {
yield* getNextPageOfUsers() // This will need to return an array of users from an http request
}
}
Я уверен, что я думаю о чем-то здесь не так, но я не могу найти ни одного примера, кто использует генератор, как это (в основном люди, использующие их статические данные или люди делают что-то как async(function*(){...})
, что не совсем то, что я ищу). Важная часть здесь заключается в том, что я хочу, чтобы конечный пользователь мог использовать данные, как описано выше.
-Vince
Я рекомендую уточнить вопрос. В комментарии к моему удаленному ответу вы сказали: «Моя проблема не в потреблении, это реализация генератора, который потребляет асинхронные данные» * Я не верю, что вы * можете * реализовать генератор как асинхронный : Когда вы вызываете генератор, он должен возвращать следующий элемент или ничего, и поэтому не может вернуть значение async так же, как обычные функции не могут вернуть значение async. –
Возможно с помощью генератора асинхронных функций - теперь они находятся в спецификации. –
Боковое примечание: проблема с кодом потребления также определенно: она перебирает одну страницу пользователей. Для циклического перехода по нескольким страницам вам понадобится вложенный цикл (один для страниц, один для пользователей на этой странице). –