zoukankan      html  css  js  c++  java
  • 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这位大哥的代码后,自己更加精简的一版。

  • 相关阅读:
    使用Stream流递归 组合树形结构
    MySQL 8 通用表表达式
    sa-token 权限认证
    先更新缓存还是先更新数据库?
    钉钉 回调事件 消息加解密
    commons-io
    stream和parallelstream的区别
    消除if...else
    springboot 扩展xml请求和响应
    springboot admin 邮箱
  • 原文地址:https://www.cnblogs.com/wofeiwofei/p/5113827.html
Copyright © 2011-2022 走看看