【发布时间】:2019-03-10 21:35:09
【问题描述】:
我有一个异步获取数据库行的函数,并为每一行调用一个回调函数。我正在尝试编写一个包装器,它是一个生成器函数,每次返回一行时都会产生,但我没有看到如何正确产生。
原始代码如下所示:
db.each(query, (err, row) => {
// do something here with row
}, () => {
// called after the last row is returned
})
我熟悉生成器的工作原理,但产量似乎属于生成器函数本身,而不是匿名函数。所以我认为这样的事情是行不通的:
function* dbEach(db, query) {
db.each(query, (err, row) => {
yield row
})
}
当我真正尝试时,我得到一个错误“意外的标识符”。
我进一步看了一下,似乎 ES2018 现在有异步迭代器,它们应该使这成为可能。但是,在我已经有一个被多次调用的回调的情况下,我很难弄清楚如何准确地使用异步迭代器。
【问题讨论】:
-
你
yield来自一个内部的非生成器函数。 -
不确定这是否是您需要的,
function* dbEach(db, query) { yield db.each(query, (err, row) => row); } -
@Rikin 哦...也许
yield*? -
如何知道所有
.each回调何时完成?是否有.finished属性或类似的东西可以检查? (也许有比each更好的函数,您可以从中获取所有行作为 array,这会使事情变得容易得多) -
@CertainPerformance 还有另一个可选回调。
标签: javascript callback generator