Node.js Generatorコールバックと比較(C)

このチュートリアルでは、次のことを学習します。 Generatorとコールバックとの違い

何ですか generators?

Generatorでかなり有名になりました Node.js それはおそらく彼らの能力によるものでしょう。

  • Generatorは、一時停止および再開できる関数の実行です。 later ポイント。
  • Generatorは、「遅延実行」などの概念を実行するときに役立ちます。 これは基本的に、実行を一時停止して任意に再開することで、必要な場合にのみ値を取得できることを意味します。

Generatorには以下の 2 つの主要なメソッドがあります。

  1. 降伏法 – yield メソッドが関数内で呼び出され、yield メソッドが呼び出される特定の行で関数の実行が停止されます。
  2. 次の方法 – このメソッドは、yield メソッドを持つ関数の実行を再開するためにメイン アプリケーションから呼び出されます。 関数の実行は、次の yield メソッドまたはメソッドの終了まで継続されます。

その方法の例を見てみましょう generatorsを使用できます。

この例では、2 つの数値を加算する単純な Add 関数を使用しますが、メソッドの実行をさまざまな時点で停止し続けて、その方法を示します。 generatorsを使用できます。

Node.js Generators

function* Add(x) {
   yield x + 1;
   var y = yield(null);
   y = 6
   return x + y;
}

var gen = Add(5);

gen.next();

gen.next(); 

コードの説明

  1. 最初のステップは、 generator "関数"。 これは、関数キーワードに「*」を追加することで行われることに注意してください。 次に、x のパラメーターを取る Add という関数を定義します。
  2. yield キーワードは、 generators. これにより、何かの途中で関数を一時停止するための強力な構造になります。 したがって、ここでは、関数の実行は、ステップ 4 で実行される next() 関数を呼び出すまで停止されます。 この時点で、x の値は 6 になり、関数の実行は停止されます。
  3. ここで最初に呼び出すのは、 generator 関数を作成し、値 5 を Add 関数に送信します。 この値は、Add 関数の x パラメーターに置き換えられます。
  4. next() 関数を呼び出すと、Add() 関数が実行を再開します。 次のステートメント var y= yield(null) が実行されると、Add() 関数は再び実行を停止します。
  5. ここで、 next() 関数を再度呼び出した後、次のステートメントが実行され、x=5 と y=6 を組み合わせた値が追加されて返されます。

コールバックと generators

Generatorは、いわゆるコールバック地獄の問題を解決するために使用されます。 Node.js アプリケーションの開発中にコールバック関数が非常にネストされ、複雑すぎてコールバック関数を使用できない場合があります。

これはどこですか? generatorは便利です。 この最も一般的な例の XNUMX つは、タイマー関数を作成する場合です。

以下の例を見てみましょう generatorはコールバックよりも役立つことがわかります。

この例では、単純な時間遅延関数を作成するだけです。 次に、1000、2000、3000 ミリ秒の遅延を組み込んだこの関数を呼び出します。

ステップ1) 必要な時間遅延コードを使用してコールバック関数を定義します。

コールバックと Generators

function Timedelay(ptime, callback) {

setTimeout(function() {
  
    callback("Pausing for " + ptime);
    
  }, time);
}

コードの説明

  1. ここでは、ptime というパラメーターを使用して Timelay という関数を作成しています。 これにより、アプリケーションに導入したい必要な時間遅延が考慮されます。
  2. 次のステップでは、アプリケーションがこれらのミリ秒間一時停止することを示すメッセージをユーザーに表示するだけです。

ステップ2) 次に、コールバックを組み込んだ場合のコードを見てみましょう。 1000、2000、3000 ミリ秒の値に基づいてコールバックを組み込みたいとします。以下のコードは、コールバックを使用してこれらを実装する方法を示しています。

コールバックと Generators

Timedelay(1000, function(message) {
  
  console.log(msg);
  Timedelay(2000, function(message) {
    
    console.log(msg);
    Timedelay(3000, function(message) {
      
      console.log(msg);
  })
  })
})

コードの説明

  1. 値として 1000 を使用して、Timelay をコールバックとして呼び出しています。
  2. 次に、値として 2000 を指定して、Timelay 関数を再度呼び出します。
  3. 最後に、値として 3000 を指定して、Timelay 関数を再度呼び出します。

上記のコードから、関数の呼び出しを複数回開始する必要があるため、さらに複雑になることがわかります。

ステップ3) 次に、同じコードを使用して実装する方法を見てみましょう。 generators. 以下のコードから、次を使用して Timelay 関数を実装することがいかに簡単になったかがわかります。 generators.

コールバックと Generators

function* Messages() {
  console,log(yield(Timedelay(1000, function(){})));
  console,log(yield(Timedelay(2000, function(){})));
  console,log(yield(Timedelay(3000, function(){})));
}

コードの説明

  1. まず、 generator Timelay 関数を呼び出すために使用される関数。
  2. パラメータ値として 1000 を使用して、Timelay 関数とともに Yield 関数を呼び出しています。
  3. 次に、パラメーター値として 2000 を使用して、Timelay 関数とともに Yield 関数を呼び出します。
  4. 最後に、パラメータ値として 3000 を指定して、Timelay 関数とともに Yield 関数を呼び出しています。

まとめ

Generatorを使用すると、ネストされたコールバックの問題を軽減し、いわゆるコールバック地獄を取り除くのに役立ちます。 Generatorは、関数の処理を停止するために使用されます。これは、a で 'yield' メソッドを使用することによって実現されます。syncクロノス機能。