ES6-Generator基础用法

Generator简介:

  生成器,本身是函数,执行后返回迭代对象,函数内部要配合yield使用Generator函数会分段执行,遇到yield暂停。

 

使用Generator注意点:function 和函数名之间需要带 * 

function* text(){
            
        }

 

 

Generator的yield注意点:yield是ES6新关键字,作用是使Generator(生成器)函数暂停。

        function* text(){
            yield 'a';
            yield 'b';
            yield 'c';
            return 'd';
        }
        let iterationObj = text();

        console.log(iterationObj.next());//{value: "a", done: false}
        console.log(iterationObj.next());//{value: "b", done: false}
        console.log(iterationObj.next());//{value: "c", done: false}
        console.log(iterationObj.next());//{value: "d", done: true}

    yield后,必须return最后一个值,如果不return最后一个值value为undefined。

    当每次执行后返回{value, done}value值是当次执行yield里面的值,done值是当次执行看看代码执行到第几行,如果到最后一行返回true,其他返回false

 

那么我们如何证明当遇到yield函数暂停。

  function* text(){
            yield 'a';
            console.log('1');
            yield 'b';
            console.log('2');
            yield 'c';
            console.log('3');
            return 'd'
        }

        let iterationObj = text();
        console.log(iterationObj.next());//因为第一行是yield碰到暂停输出:{value: "a", done: false} 
        console.log(iterationObj.next());//执行第二行输出:1  然后碰到yield暂停输出:{value: "b", done: false}

 

当yield被变量接收,下一次执行参数就是上一个变量的值。

function* text(){
            let value = yield 'a';
            console.log(value);
            let value1 = yield 'b';
            console.log(value1);
            let value2 = yield 'c';
            console.log(value2);
            return 'd'
        }

        let iterationObj = text();
        console.log(iterationObj.next());//{value: "a", done: false} 因为第一个是执行yield所以直接暂停不输出第二行的console.log
        console.log(iterationObj.next('22'));
        那么打印结果就是{value: "a", done: false}
                         22
                       {value: "b", done: false}

 

 

 

 

  

posted @ 2019-05-05 20:11  set_Promise  阅读(259)  评论(0编辑  收藏  举报