12_生成器

生成器

理解:生成器其实就是一个特殊的函数

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()
// 依次打印 '用户信息'、'订单信息'、'商品信息'

你可能感兴趣的:(12_生成器)