Nodejs-callbacks-concept

提供:Dev Guides
移動先:案内検索

Node.js-コールバックの概念

コールバックとは何ですか?

コールバックは、関数の非同期同等物です。 コールバック関数は、特定のタスクの完了時に呼び出されます。 Nodeはコールバックを多用します。 NodeのすべてのAPIは、コールバックをサポートするように作成されています。

たとえば、ファイルを読み取る関数は、ファイルの読み取りを開始し、すぐに制御を実行環境に戻し、次の命令を実行できるようにします。 ファイルI/Oが完了すると、コールバック関数、ファイルのコンテンツをパラメーターとして渡しながら、コールバック関数を呼び出します。 そのため、ファイルI/Oのブロックや待機はありません。 Node.jsは、関数が結果を返すのを待たずに多数のリクエストを処理できるため、非常にスケーラブルになります。

ブロッキングコードの例

次の内容で input.txt という名前のテキストファイルを作成します-

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

次のコードで main.js という名前のjsファイルを作成します-

var fs = require("fs");
var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("Program Ended");

次に、main.jsを実行して結果を確認します-

$ node main.js

出力を確認します。

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended

ノンブロッキングコードの例

次の内容のinput.txtという名前のテキストファイルを作成します。

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

main.jsを更新して、次のコードを作成します-

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err) return console.error(err);
   console.log(data.toString());
});

console.log("Program Ended");

次に、main.jsを実行して結果を確認します-

$ node main.js

出力を確認します。

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

これらの2つの例は、ブロッキング呼び出しとノンブロッキング呼び出しの概念を説明しています。

  • 最初の例は、プログラムがファイルを読み取るまでブロックし、その後、プログラムのみがプログラムを終了することを示しています。
  • 2番目の例は、プログラムがファイルの読み取りを待たずに「プログラム終了」の印刷に進み、同時にブロックされていないプログラムがファイルの読み取りを続行することを示しています。

したがって、ブロッキングプログラムは非常に順番に実行されます。 プログラミングの観点からは、ロジックの実装は簡単ですが、ノンブロッキングプログラムは順番に実行されません。 プログラムで処理するデータを使用する必要がある場合は、同じブロック内に保持して、順次実行する必要があります。