异步生成器类卡在无限循环javascript上

异步生成器类卡在无限循环javascript上,javascript,ecmascript-6,async-await,promise,generator,Javascript,Ecmascript 6,Async Await,Promise,Generator,我正在尝试使以下异步生成器工作: 类MyIterator{ 建造师(m){ 这个集合=m; } 异步*[Symbol.iterator](){ 对于(此.collection的let项){ const resultItem=等待承诺。解决(项) console.log(“项:”,resultItem) 收益率 } } } (异步()=>{ 常量迭代器=新的MyIterator([1,2,3]) 设时间=0 等待(让迭代器的东西){ log(“thing:,thing”) //这是为了避免无限循环

我正在尝试使以下异步生成器工作:

类MyIterator{
建造师(m){
这个集合=m;
}
异步*[Symbol.iterator](){
对于(此.collection的let项){
const resultItem=等待承诺。解决(项)
console.log(“项:”,resultItem)
收益率
}
}
}
(异步()=>{
常量迭代器=新的MyIterator([1,2,3])
设时间=0
等待(让迭代器的东西){
log(“thing:,thing”)
//这是为了避免无限循环
时代++
如果(次数>1000次)中断
}
})()
但它最终会进入一个无限循环,
thing
始终是未定义的

item: 1
thing: undefined
item: 2
thing: undefined
item: 3
thing: undefined (x999)

我尝试过类似的代码,但这次没有
Promise/async
行为,它似乎工作得很好

类MyIterator{
建造师(m){
这个集合=m;
}
*[符号.迭代器](){
对于(此.collection的let项){
日志(“项:”,项)
收益项目
}
}
}
常量迭代器=新的MyIterator([1,2,3])
for(让迭代器的东西){
log(“thing:,thing”)
}
正如在对我的问题的评论中指出的,我使用的是
Symbol.iterator
,而不是
Symbol.asyncIterator
。以下实施工作按预期进行:

类MyIterator{
建造师(m){
这个集合=m;
}
async*[Symbol.asyncIterator](){
对于(此.collection的let项){
const resultItem=等待承诺。解决(项)
console.log(“项:”,resultItem)
收益率
}
}
}
(异步()=>{
常量迭代器=新的MyIterator([1,2,3])
等待(让迭代器的东西){
log(“thing:,thing”)
}
})()

的wait..of构造的
将尝试在异步迭代器上迭代

异步迭代器是使用以下命令定义的:

类MyIterator{
建造师(m){
这个集合=m;
}
async*[Symbol.asyncIterator](){//{
常量迭代器=新的MyIterator([1,2,3])
设时间=0
等待(让迭代器的东西){
//没有无限循环
log(“thing:,thing”)
}

})()
尝试使用
然后()
而不是等待。这样它只会在第一次迭代完成时产生下一次迭代。@zergski不,这是不正确的。
Symbol.iterator
->
Symbol.asyncIterator
?你确实想定义一个异步迭代器,对吗?你已经将它标记为一个常规迭代器。就是@VLAZ,我不知道
Symbol.asyncIterator
>。当我从
.iterator
更改为
.asyncierator
时,一切都正常了。感谢您指出术语。
MyIterator
实现了,而不是迭代器。
item: 1
thing: 1
item: 2
thing: 2
item: 3
thing: 3