主题
异步
异步迭代器
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
}
})()