ジェニーン・レイトとasync/await



1.ジェニーン・レイトとは?


ES 6が導入したサードパーティは,コードブロックの動作を一時停止し,必要に応じて回復できる特殊な関数である.

  • サードパーティ関数は、関数が実行する制御権を関数呼び出し元に譲渡することができる.すなわち、関数呼び出し者は、関数の実行を一時停止または再起動することができる.関数の制御権は、関数によって排他されるのではなく、関数呼び出し元に譲渡できます.

  • サードパーティ関数は、関数呼び出し者と関数の状態を交換できます.

  • jner layer関数を呼び出すと、jner layerオブジェクトが返されます.
  • 2.サードパーティ関数の定義


    サードパーティ関数は、function*キーワードとして宣言されます.
    次いで、1つまたは複数のyield式が含まれる.
    function* genDecFunc() {
      yield 1;
    }

    3.サードパーティオブジェクト


    jner rator関数を呼び出すと、通常の関数のように関数コードブロックを実行するのではなく、jner ratorオブジェクトが生成され、返されます。

    JENNERオブジェクトはnextメソッドを持つイテレーションですが、イテレーションにはreturn, throwメソッドはありません.

  • nextメソッドを呼び出すと、yield式に実行されるコードブロックは、yieldの値をvalue property値、falseをdoneの値とするウィジェットツリーオブジェクトを返す.

  • 呼び出しreturnメソッドは、パラメータで渡されたproperty値をproperty値として返すイテレーションカットオブジェクトを返します.
  • function* genDecFunc() {
      try {
        yield 1;
        yield 2;
        yield 3;
      } catch (e) {
        console.error(e);
      }
    }
    
    const generator = genDecFunc();
    
    console.log(generator.next());
    console.log(generator.return('end'));

    4. aynsc/await


    ES 8はasync/awaitを導入した.async/awaitプロミスをベースに動作します.
    async function fetchTodo() {
      const url = 'https://jsonplaceholder.typicode.com/todos/1';
    
      const response = await fetch(url);
      const todo = await response.json();
      console.log(todo);
    }

    4.1 async関数

    awaitキーワードは、async関数の内部で使用する必要があります.いつもフロミスを返します.

    4.2 awaitキーワード

    awaitキーワード待ちプロセスがsettledの状態になり、settledの状態になるとresolveの処理結果に戻る.awaitはスミスの前で使用しなければなりません.

    4.3エラー処理

    async/awaitではtrycatch文を使用できます.
    const foo = async () => {
      try {
        const wrongUrl = 'https://wrong.url';
    
        const response = await fetch(wrongUrl);
        const data = await response.json();
        console.log(data);
      } catch (err) {
        console.error(err);
      }
    };