Skip to content

异步

异步迭代器

js
let range = {
  from: 1,
  to: 5,

  [Symbol.asyncIterator]() {
    return {
      current: this.from,
      last: this.to,

      async next() {
        // 注意:我们可以在 async next 内部使用 "await"
        await new Promise(resolve => setTimeout(resolve, 1000)) // (3)

        if (this.current <= this.last) {
          return { done: false, value: this.current++ }
        } else {
          return { done: true }
        }
      },
    }
  },
}

;(async () => {
  for await (let value of range) {
    console.log(value) // 1,2,3,4,5
  }
})()

异步生成器

js
async function* generateSequence(start, end) {
  for (let i = start; i <= end; i++) {
    await new Promise(resolve => setTimeout(resolve, 1000))

    yield i
  }
}

;(async () => {
  let generator = generateSequence(1, 5)
  for await (let value of generator) {
    console.log(value) // 1,2,3,4,5
  }
})()

基于 MIT 许可发布