ES 6を深く理解する――サブエージェントとジェネレータ(Generator)

11543 ワード

ES 6を深く理解する――サブエージェントとジェネレータ(Generator)
記事の目次
  • ES 6を深く理解する、シーケンサとジェネレータ
  • ローズマリー
  • ジェネレータ
  • 生成器オブジェクトの方法
  • は、反復可能なオブジェクトおよび‘for-of’サイクル
  • を有する.
  • は、デフォルトのディショナー
  • にアクセスします.
  • は、反復可能なオブジェクト
  • を作成する.
  • 内に、ローズマリー
  • を構築する.
  • 集合オブジェクト
  • 文字列スキニー
  • NodeList Disc
  • アドバンスドディショナーの機能
  • ローズマリーに
  • を伝えます.
  • エラーをスローしました.
  • 生成器戻り文
  • 委託ジェネレータ
  • 非同期タスク実行
  • 簡単タスク実行器
  • は、タスク実行器にデータを転送する
  • .
  • 非同期タスク実行器
  • 生成器の出現は、追跡for巡回反復変数iの複雑さを除去し、サイクル中のエラーを低減することを目的とする.
    サンデー
    ディケンサは特殊なオブジェクトで、反復プロセスのために特別に設計された専用インターフェースを持っています.すべてのディケンサにはnext()方法があります.毎回呼び出して、結果の対象に戻します.その結果、オブジェクトは2つの属性があります.一つはvalueで、次の戻り値を表します.もう一つはdoneであり、これはブールタイプの値であり、現在は戻り可能なデータがない場合はtrueに戻る.また、次の利用可能な値を返すために、現在のセットの中の値の位置を指す内部ポインタも格納されています.
    例:
    function createIterator(items) {
      var i = 0
      
      return {
        next: function() {
          var done = (i >= items.length)
          var value = !done ? items[i++] : undefined
          
          return {
            done: done,
            value: value
          }
        }
      }
    }
    
    var iterator = createIterator([1,2,3])
    
    console.log(iterator.next())  
    console.log(iterator.next())
    console.log(iterator.next())
    //                
    console.log(iterator.next())
    
    
    生成器
    生成器は、サンデーを返す関数です.next()キーの後にfunctionを追加して定義し、*キーを使用してディンブラに戻る.
    矢印関数ではサブジェネレータを生成できません.
    例:
    function *createIterator() {
      yield 1;
      yield 2;
      yield 3;
    }
    //                    ,            
    let iterator = createIterator();
    
    console.log(iterator.next().value); // 1
    console.log(iterator.next().value); // 2
    console.log(iterator.next().value); // 3
    
    
    オブジェクトを生成する方法
    オブジェクトにジェネレータを追加できます.
    反復可能なオブジェクトおよびyieldサイクル
    反復可能なオブジェクトはfor-of属性を有する.
    for−ofサイクルは、実行される度に、反復可能なオブジェクトのSymbol.iterator方法を呼び出し、その結果オブジェクトのnext()属性を変数に格納し、オブジェクトのvalue属性の値がdone属性になるまでループは継続的に実行される.
    例:
    let values = [1,2,3];
    
    for(let num of values) {
      console.log(num)
    }
    //     
    // 1
    // 2
    // 3
    
    デフォルトのローズマリーにアクセスtrue反復可能なオブジェクトを作成Symbol.iteratorローズマリー
    集合オブジェクト
  • entries()
  • values()
  • keys()
  • 文字列ローズマリー
    ノードリスト
    Nodes Listコード文書ページのすべての要素の集合
    アドバンスドローズマリーの機能
    サンデーに参席する*[Symbol.iterator]() {}を通じて次のローズマリーに伝えます.
    ローズマリーにエラーを投げます.
    ジェネレータはステートメントを返します.
    function *createIterator() {
      yield 1;
      return; //        
      yield 2;
    }
    
    委託ジェネレータ
    非同期タスクの実行
    簡単なタスク実行器
    function run(taskDef) {
      //              
      let task = taskDef();
      
      //       
      let result = task.next();
      
      //     next()   
      function step() {
        if(!result.done) {
          result = task.next();
          step()
        }
      }
      //       
      step();
    }
    
    タスク実行器にデータを転送します.
    非同期タスク実行器