# generator实现

简单generator实现

  • 在编译阶段,把yield后面的语句放入队列中
  • 提供一个next方法顺序执行出队列操作
function* genF() {
    yield new Promise((resolve, reject) => {
        console.log('p1');
        setTimeout(() => {
            resolve(name);
        }, 1000);
    });
    yield 1;
}
function markGenerator() {
    // yield队列
    const yieldArr = [];
    yieldArr.push(new Promise((resolve, reject) => {
        console.log('p1');
        setTimeout(() => {
            resolve(name);
        }, 1000);
    }));
    yieldArr.push(1);

    // 空函数,提供next方法
    function fn() {
        // 当前执行次序
        this.index = 0;
    }
    fn.prototype.next = function() {
        const { index } = this;
        // 超出执行范围done为ture
        if (index >= yieldArr.length) return {done: true}
        const result = {
            done: index === yieldArr.length - 1,
            value: yieldArr[index]
        };
        // 执行次序指向下一处
        this.index++;
        return result;
    }
    return new fn;
}