zoukankan      html  css  js  c++  java
  • ES6之genorator和yield使用(迭代器)

    例1:

    function *g(){
        yield 100
        yield 200
        return 300
    }
    let res = g()
    console.log(res);
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    // 输出:
    /*
    Object [Generator] {}
    { value: 100, done: false }
    { value: 200, done: false }
    { value: 300, done: true }
    { value: undefined, done: true }
    */
    

    next方法类似promise .then链式调用
    done属性的值代表是否调用完毕

    例2:

    function* g() {
      yield 100;
      yield 200;
      yield g2();
      return 500;
    }
    
    function* g2() {
      yield 300;
      yield 400;
    }
    
    let res = g();
    console.log(res);
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    // 输出
    /*
    Object [Generator] {}
    { value: 100, done: false }
    { value: 200, done: false }
    { value: Object [Generator] {}, done: false }
    { value: 500, done: true }
    { value: undefined, done: true }
    */
    

    可以看出,正常情况下,如果在一个迭代器里调用另一个迭代器,返回的是迭代器本身,不会对另一个迭代器遍历
    如果想要调用另一个迭代器进行遍历的话,可以使用 yeild* 修饰这个迭代器:

    function* g() {
      yield 100;
      yield 200;
      yield* g2();
      return 500;
    }
    
    function* g2() {
      yield 300;
      yield 400;
    }
    
    let res = g();
    console.log(res);
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    console.log(res.next());
    // 输出:
    /*
    Object [Generator] {}
    { value: 100, done: false }
    { value: 200, done: false }
    { value: 300, done: false }
    { value: 400, done: false }
    { value: 500, done: true }
    { value: undefined, done: true }
    */
    
  • 相关阅读:
    面试技巧——经典面试问题回答思路
    Linux试题及答案(一)
    面试中的问到薪资问题怎么回答?
    LoadRunner监控Linux
    面试时如何解释被裁原因
    可持久化数组
    洛谷P2286宠物收养场·改
    改博客的背景
    洛谷P2286宠物收养场
    阶乘的0
  • 原文地址:https://www.cnblogs.com/zoo-x/p/14504540.html
Copyright © 2011-2022 走看看