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!!!!!

名前の付いたjsファイルを作成します main.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番目の例は、プログラムがファイルの読み取りを待たずに「プログラム終了」の印刷に進むと同時に、ブロックせずにプログラムがファイルの読み取りを続行することを示しています。

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