• 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这位大哥的代码后,自己更加精简的一版。

  • 相关阅读:
    C++指针详解
    C++中#include包含头文件带 .h 和不带 .h 的区别
    #if的使用说明
    非常简单的语音朗读功能
    C#基础笔记(第十一天)
    C#基础笔记(第十天)
    手机管理系统
    编程书籍大集合
    centos 安装多实例数据库
    Python3 网络爬虫(请求库的安装)
  • 原文地址:https://www.cnblogs.com/wofeiwofei/p/5113827.html
Copyright © 2020-2023  润新知