Skip to content

生成器其实就是一个特殊的函数。

创建生成器

JavaScript
function * gen(){
    console.log("111");
    // yield 函数代码的分割符
    let one = yield '一只没有耳朵';
    console.log(one)
    console.log("222");
    let two = yield '一只没有尾巴';
    console.log(two)
    console.log("333");
    yield '真奇怪';
    console.log("444");
}

调用生成器

JavaScript
let iterrator = gen()
// next方法可以传参
iterrator.next()

异步编程

整个JS是异步单线程的,文件操作,网络操作...

案例

1s 后控制台输出111 2s 之后输出222 3s之后输出333

普通方案

JavaScript
setTimeout(()=>{
    console.log(111);
    setTimeout(()=>{
        console.log(222)
        setTimeout(()=>{
            console.log(333)
        },3000)
    },2000)
},1000)
// 回调地狱

生成器方案

JavaScript
function one() {
    setTimeout(() => {
        console.log(111)
        iterator.next()
    }, 1000)

}

function two() {
    setTimeout(() => {
        console.log(222)
        iterator.next()
    }, 2000)
}

function three() {
    setTimeout(() => {
        console.log(333)
        iterator.next()
    }, 3000)
}

// 创建生成器
function* gen() {
    yield one();
    yield two();
    yield three();
}

let iterator = gen()
iterator.next()