生成器
理解:生成器其实就是一个特殊的函数
yield:函数代码的分隔符,将生成器中分割成相应的代码块,在调用 next 方法时会依次执行代码块
function * gen() {
console.log(111)
yield '一只没有耳朵'
console.log(222)
yield '一只没有尾部'
console.log(333)
yield '真奇怪'
console.log(444)
}
// 获取迭代器对象
let iterator = gen()
iterator.next() // 打印出 111,返回 {value: '一只没有耳朵', done: false}
for (const v of gen()) {
console.log(v)
}
1. 参数传递
function * gen(arg) {
console.log(arg)
let one = yield 111
console.log(one, 'one')
let two = yield 222
yield 333
}
// 获取生成器对象
let iterator = gen('AAA')
console.log(iterator.next()) // 打印 AAA 返回 { value: 111, done: false }
console.log(iterator.next('BBB')) // 打印 BBB 返回 { value: 222, done: false }
2. 生成器函数实例
let timeId1 = function(){
setTimeout(() => {
let data = '用户信息'
iterator.next(data)
}, 1000)
}
let timeId2 = function(){
setTimeout(() => {
let order = '订单信息'
iterator.next(order)
}, 1000)
}
let timeId3 = function(){
setTimeout(() => {
let goods = '商品信息'
iterator.next(goods)
}, 1000)
}
function * gen(arg) {
let userInfo = yield timeId1()
console.log(userInfo)
let order = yield timeId2()
console.log(order)
let goods = yield timeId3()
console.log(goods)
}
// 获取生成器对象
let iterator = gen()
iterator.next()
// 依次打印 '用户信息'、'订单信息'、'商品信息'