ES6 基础版迭代器

ES6中引入了generator

function* get() {
    var result1 = yield c;
    var result2 = yield b;
    var result3 = yield a;
    console.log(result1);
    console.log(result2);
    console.log(result3);
    return "a";
}

当调用get方法的时候,返回一个迭代器对象。var myGenerator=get();

yield关键字是用来返回迭代中的值的,每调用一次.next()方法,则返回一个yield后的值。

var one=myGenerator.next(); 返回一个object,格式为{done:false,value:c};

done标识是否迭代完成,当为true的时候则迭代完成,value为迭代出的值,此时的值为第一个yield后的值。

如果两次yield之间有代码,则是执行代码到第二次yield;

第二次调用后返回{done:false,value:b}

当第四次调用next的时候,yield a后的代码就会执行,并返回{done:false,value:"a"(如果迭代器没有返回值,则为undefined))}

对于迭代器对象可以使用for of进行迭代,即for(var item of myGenerator){};

利用迭代器可以实同步操作

function co(generator) {
    function next() {
        var part = generator.next("迭代");
        if (!part.done) {
            part.value(next);
        } else {
            console.log("完成");
        }
    }
    next();
}
function a() {
    setTimeout(function () {
        console.log(1);
    }, 1000);
     return "a";
}
function b(next) {
    setTimeout(function () {
        console.log(2);
        next();
         return "b";
    }, 2000);

}
function c(next) {
    setTimeout(function () {
        console.log(3);
        next();
    }, 3000);
     return "c";
}
function* get() {
    var result1 = yield c;
    var result2 = yield b;
    var result3 = yield a;
    console.log(result1);
    console.log(result2);
    console.log(result3);
    return "a";
}

co(get());

这是参考

https://cnodejs.org/topic/53474cd19e21582e740117df这位大哥的代码后,自己更加精简的一版。

时间: 2024-08-01 10:41:45

ES6 基础版迭代器的相关文章

ES6中的迭代器(Iterator)和生成器(Generator)

前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与Map集合)都依赖迭代器的实现,这个新特性对于高效的数据处理而言是不可或缺的,在语言的其他特性中也都有迭代器的身影:新的for-of循环.展开运算符(...),甚至连异步编程都可以使用迭代器 本文将详细介

PHP框架Yii2.0安装(基础版、高级版)

最近农成也是切入了yiiframework 2.0,就是安装yii2.0就花费了不少的时间,为此做了很多的弯路,特此写一篇博文来给后面学习的同学少走一点的弯路.写的不好的地方欢迎各位学习的同学们能够指点出来. yii2.0的安装,官方提供了两种的安装办法,一种是通过composer来安装,另外一种是通过跟yii1.0的办法直接下载安装包来安装.至于对于第一种composer的安装,农成就不做多余的说明了,这里有很好的安装教程.点击进去就可以看到了,为此农成就不在说了,下面就给大家详细讲讲第二种通

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码

[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-终端源码 广东职业技术学院 欧浩源 一.关于硬件电路 关于这个综合实训案例,具体需求详见<[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-题目需求>. 我自己实在"全国职业院校技能大赛--物联网技术应用赛项"的Zigbee模块上实现的.该模块的电路应该和TI公司官方评估板的推荐电路差不多,我想现在市面上很多开发板也是参考这样的电路设计,只要您使用的开发板上有LED灯.按键输入.串口输出和一路A/

淘宝店铺基础版全屏装修步骤及代码,已经经过测试

1.淘宝基础版全屏海报旺铺基础版是左右两栏的布局,那我们就把左栏的模块全部删掉,在右栏建立自己的自定义模块,在自定义模块中加入以下代码,产生的效果就是通栏效果.在“加入自己的自定义内容”这句话这里插入自定义代码比如全屏不轮播代码等.<div class="J_TWidget" data-widget-config="{'effect': 'fade', 'circular': true ,'contentCls':'taobaoux'}" data-widge

淘宝装修基础版全屏店招

1.淘宝基础版全屏海报旺铺基础版是左右两栏的布局,那我们就把左栏的模块全部删掉,在右栏建立自己的自定义模块,在自定义模块中加入以下代码,产生的效果就是通栏效果.在“加入自己的自定义内容”这句话这里插入自定义代码比如全屏不轮播代码等.<div class="J_TWidget" data-widget-config="{'effect': 'fade', 'circular': true ,'contentCls':'taobaoux'}" data-widge

仿360在Launcher画面显示内存使用率的浮窗(基础版)

MainActivity如下: package cc.cc; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import android.content.Context; import android.content.Intent; /**

[js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般都有Symbol.iterator属性,你可以在控制台中用console.dir打印数组,Map,Set,在他们的原型对象(prototype)上面就能找到.这个属性与迭代器密切相关,通过该函数可以返回一个迭代器,下文,我会举一个例子.一般来说所有的集合对象(数组,Set,Map 以及字符串)都是可

逗比之——程序猿装逼手冊1(0基础版)

一.准备工作 "工欲善其事必先利其器." 1.电脑不一定要配置高,可是双屏是必须的,越大越好,能一个横屏一个竖屏更好.一个用来查资料,一个用来写代码.总之要显得信息量非常大,效率非常高. 2.椅子不一定要舒服,可是一定要能够半躺着. 3.大量的便签,各种的颜色的,用来记录每天要完毕的事务,多多益善.沿着电脑屏幕的边框,尽量贴满,显出有非常多事情的样子. 4.工具书,orelly的,机械工业,电子工业什么的都能够,能英文就英文,不行影印版的也能够,反正越厚越好,并且千万不要放在书架上,一

SharePoint 2013 基础版 离线安装步骤

SharePoint 2013 基础版 离线安装步骤 1.    介绍 SharePoint 2013 提供了一个企业的业务解决方案,它利用了企业应用程序集成功能,以及灵活的部署选项和管理工具,将来自不同系统的信息集成到一个解决方案中.这个门户站点使得端到端的合作更为容易,实现了个人.团队和信息的整合.组织和搜索.用户可以通过门户内容和布局的定制和个性化以及目标受众,更快地找到相关信息.公司可以根据受众的公司职位.团队身份.兴趣或其他可以设置的成员规则来设定信息.程序和更新.SharePoint