javaScript 异步迭代器使用

50 阅读1分钟
  • 异步迭代器,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')
}
  • 浏览器运行输出

image.png