- 异步迭代器,for await of 调用的是函数或类的 Symbol.asyncIterator 方法
// 异步迭代器
class Emitter{
constructor(max){
this.max = max;
this.asyncIdx = 0;
}
async *[Symbol.asyncIterator](){
while(this.asyncIdx < this.max){
yield new Promise((resolve)=>{
setTimeout(()=>{
resolve(this.asyncIdx++)
},500)
})
}
}
}
async function test(){
let emitter = new Emitter(5)
console.log('start\n')
for await(const x of emitter){
console.log(x,Number(new Date()));
}
console.log('end\n')
}
- 浏览器运行输出