【发布时间】:2020-03-22 08:12:22
【问题描述】:
使用同步 JavaScript 生成器,我可以按如下方式对其进行迭代:
(() => {
function * syncGenerator () {
yield 1
yield 2
yield 3
console.log('done')
}
Array.from(syncGenerator())
})()
这将简单地迭代整个生成器,而无需初始化变量。我想对异步生成器做同样的事情。我能想到的最接近的解决方案如下:
(async () => {
async function * asyncGenerator () {
yield Promise.resolve(1)
yield Promise.resolve(2)
yield Promise.resolve(3)
console.log('done')
}
for await (const num of asyncGenerator()) {}
})()
不幸的是,我不得不在上面的代码 sn-p 中实例化变量num。这会导致 StandardJS 在该行给出错误,因为未使用该变量。有什么方法可以迭代异步生成器而无需创建变量?
【问题讨论】:
-
这可能有点 XY-ish;为什么 StandardJS 存在变量存在问题?
-
iterator helpers proposal 将有一个
toArray方法 -
如果promise需要按顺序构建和解析,使用
.then()。如果顺序无关紧要,请使用Promise.all()。 -
@IceMetalPunk StandardJS 抱怨该变量已初始化,但未使用。为了清楚起见,我会更新我的问题。
-
看起来没有异步生成器理解。或者,StandardJS 确实提供了hide certain warnings 的方法。
标签: javascript ecmascript-6 async-await generator es6-promise