【发布时间】:2015-03-08 02:29:48
【问题描述】:
我一直在考虑这个问题,但我似乎无法提出一个合理的解决方案来解决这个问题。问题陈述很简单 - 编写一个生成器,它将延迟分页远程数据集。为简化起见,理想情况下,这是我希望我的图书馆的用户看到的内容:
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*(){...})这不是我想要做的)。这里的重要部分是我希望最终用户能够使用上述数据。
-文斯
【问题讨论】:
-
我建议澄清这个问题。在对我现在已删除的答案的评论中,您说 “我的问题不是消耗,而是消耗异步数据的生成器的实现”我不相信你 可以 i> 生成器的实现是异步的:当你调用生成器时,它必须返回下一项或什么都不返回,因此不能返回异步值,就像普通函数不能返回异步值一样。跨度>
-
使用异步生成器是可能的——这些现在都在规范中。
-
旁注:消费代码肯定也有问题:它正在循环浏览一页用户。要遍历多个页面,您需要一个嵌套循环(一个用于页面,一个用于该页面内的用户)。
-
@BenjaminGruenbaum:酷!在哪里?我在任何地方都没有看到“异步”,但与 Promise 相关(the HTML version,12 月 24 日更新)。
-
您的问题已被识别,因此 async generators 将被添加到 ECMASCript 7 中 - 危险在于尚无实现支持它,但您可以 use a transpiler like 6to5 使用它:
标签: javascript pagination ecmascript-6 es6-promise