【发布时间】:2016-07-06 13:16:20
【问题描述】:
我有一个生成器,除了其他操作之外,它还可以查询数据库,例如
function* current(db) {
const items = await db.collection('...').find({ ... });
for (const item of items)
if (...) yield item;
}
这不是有效的语法。从then 使用promise 和yield 也是不可能的。
那我该怎么办?如何在生成器中使用异步操作?
【问题讨论】:
-
不,你不能在 ES6 和 ES7 中将
async与生成器函数结合起来。 -
当然不能。但是有可能完全解决我的问题吗?我想做一个依赖数据库的生成器,从数据库中获取数据是一个异步操作。那我就别无选择了吗?
-
有一些关于如何使这些事情起作用的 ES 提案。看看github.com/kriskowal/gtor。你可以自己手工制作,甚至可以使用
await或yield,但我想它不会太简单或太干净。 -
公平地说,现在有可能在 Node 10 中制作异步生成器,所以它解决了我遇到的问题,尽管我不确定我是否有一个足够通用和足够常见的问题对现在。
-
@rm-:我有同样的问题(因此是赏金):
await是数据库调用的结果,然后从循环中产生结果。
标签: asynchronous async-await ecmascript-6 generator