vin*_*501 6 javascript pagination ecmascript-6 es6-promise
我一直在考虑这个问题,我似乎无法找到一个合理的解决方案来解决这个问题.问题陈述很简单 - 编写一个懒惰地对远程数据集进行分页的生成器.为简化起见,理想情况下,我希望我的库用户可以看到:
for (var user of users()) {
console.log(user);
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法让发电机工作.我认为像这样的逻辑可行,但我无法弄清楚如何实现它.
function* users() {
while (canPaginate) {
yield* getNextPageOfUsers() // This will need to return an array of users from an http request
}
}
Run Code Online (Sandbox Code Playgroud)
我确定我在想这里有什么问题,但是我似乎找不到任何使用像这样的生成器的人的例子(大多数人使用静态数据或人们做类似的东西async(function*(){...})不完全是什么我希望这样做.)这里的重要部分是我希望最终用户能够如上所述使用数据.
-Vince
生成器实际上是暂停并返回其调用者的函数.但是当被调用时,它们必须同步地回收一个值或完成.因此,它们无法返回异步操作的结果,原因与普通函数无法返回异步操作的结果相同.
正如Benjamin指出的那样,有一个ES7提议用于异步生成器,让他们这样做,但那是ES7,所以在这一点上显而易见.消费语法也受到影响(可以理解;对于编写调用的人来说,重要的是知道什么时候异步,我们不能让正常的函数看起来不同步).
根据当前的提议,使用异步生成器的代码看起来像:
for (var user on users()) {
console.log(user);
}
Run Code Online (Sandbox Code Playgroud)
(注意on而不是in或of.)但这可能会改变.
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |