js-generator基础

Posted fahuibuguangfan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js-generator基础相关的知识,希望对你有一定的参考价值。

js-generator基础(第四周)


看了几个小时generator相关文章,发现里面东西太多,这周想放弃写这篇,转写其他方面的,上次就用了这招,不过没有没有找到其他可写的,最后决定写一篇相当基础的generator


 

generator是什么

  • generator也是为了解决地狱回调问题的,和上周的promise一样都是为了实现异步编程,本质还是各种回调;
    在某些时候也可以认为generator为es6中新定义的数据类型,这种数据类型和函数很像,每个函数只能返回一个结果,即只能return一次,如果在某些函数中没有看到return,其实质在函数结尾是存在一个隐藏的return undefined 的,而generator不同,可以返回多次

 

实现异步编程的原理

  • 通过协程方式,协程就是多个线程相互协作,完成异步任务,如下图:
    技术分享图片

 

generator的使用

generator用 function*,比普通函数多出一个“ * ”,generator除了return语句外,可以用yield返回多次,也可以看成generator遇到yield是就返回一个值,并且generator暂停在这,当需要继续执行是只用调用generator.next()就可以继续执行,遇到yield又会暂停,再调用generator.next()后继续执行……

 

 function* gen(){
    yield 1;
    yield 2;
    yield 3;
    yield 4;
    yield 5;
    return "结束";
    }
    let g = gen();
    let i = 0;
    let st = setInterval(() => {//每间隔500ms执行一次g.next(),执行7次,并在控制台打印
            i++;
            console.log(g.next()); 
            if(i>7){ 
                clearInterval(st);
            } 
        }, 500);

结果:
技术分享图片
可以看出generator 遇到yleld就会暂停,只有当调用generator.next()才会向下执行,调用这个方法会返回{value: x, done: true/false},这个对象中value是yield的返回值,done表示generator是否执行结束,只有当执行到return时,这个对象中的done才会变成true,说明执行结束;如果仍然执行的话,如上图后两条,执行到done为true时就不要执行了
<完>
20180816
技术分享图片
发挥不广泛









以上是关于js-generator基础的主要内容,如果未能解决你的问题,请参考以下文章

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

201555332盛照宗—网络对抗实验1—逆向与bof基础

VsCode 代码片段-提升研发效率

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

JSP基础

动态SQL基础概念复习(Javaweb作业5)