我已经对此进行了思考,但似乎无法针对如何实现这一目标提出合理的解决方案。问题陈述很简单-写一个生成器,将延迟分页远程数据集。为简化起见,理想情况下,这是我希望图书馆用户看到的内容:
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*(){...})
,而这些人却并非如此)我正在寻找)。这里的重要部分是我希望最终用户能够如上所述使用数据。
-文斯
生成器实际上是暂停并回退给调用者的函数。但是,当调用它们时,它们必须同步返回一个值或完成一个值。因此,由于普通函数无法返回异步操作的结果,因此它们无法返回异步操作的结果。
正如本杰明指出的那样,有一个针对异步生成器的ES7提议,可以让他们做到这一点,但这就是ES7,因此这在将来很明显。消耗语法也受到影响(可以理解;对于编写调用的人员来说,知道什么时候异步是很重要的,当正常函数不同步时,我们不能让它们看起来是同步的)。
根据当前建议,使用异步生成器的代码如下所示:
for (var user on users()) {
console.log(user);
}
(请注意,on
而不是in
或of
。)但这可能会改变。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句