码迷,mamicode.com
首页 > Web开发 > 详细

js-generator基础

时间:2018-08-21 01:05:20      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:ges   head   存在   基础   upload   tps   异步任务   line   协程   

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基础

标签:ges   head   存在   基础   upload   tps   异步任务   line   协程   

原文地址:https://www.cnblogs.com/fahuibuguangfan/p/9508951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!