Node.jsの同期と非同期処理についての覚え書きメモ

Node.jsを扱うにあたって、関数がどのように動くのか。関数の同期処理と非同期処理について簡単にメモしておこうと思います。

スポンサードリンク

Node.jsは基本的に非同期関数

Node.jsが用意しているネットワーク・ファイルに関する関数は基本的には非同期で実装されています。関数には引数を複数渡し、そのうち1つがコールバック関数を引数にとっている場合が多いです。

コールバック関数とは

JavaScriptでは非同期処理という処理があります。その際に多く用いられるのが「コールバック関数」と呼ばれる関数です。JavaScriptでは関数の引数に対して関数を渡せます。

その際、「指定したある特定の処理に対して、その処理が終わったら引数に渡した関数を実行する」という制御をすることができます。この引数に渡される関数のことを「コールバック関数」と呼びます。

また、非同期処理がいくつも連なってコールバック関数の入れ子が深くなり関数が肥大化することを「コールバック地獄」と言うそうです。

実際にNode.jsの非同期処理を確認する

Node.jsにはフォルダを作成するためのfs.mkdir()関数が用意されています。

//モジュールを読み込む
var fs = require('fs');
//フォルダを作成する
fs.mkdir("test", function () {
  console.log("フォルダ作成が完了しました");
})
console.log("mkdir実行中です");

 

このプログラムを実行した場合、以下のようになります。

$ node mkdir.js
mkdir実行中です
フォルダ作成が完了しました

fs.mkdir()が実行された直後は、非同期処理となっているので処理が終わるまでは後に続くスクリプトが実行されます。fs.mkdir()の関数の処理が終了した際に、コールバック関数が呼ばれる仕組みとなっています。

Node.jsの関数の非同期処理を同期処理に変更する

上で確認した様に、Node.jsの関数の処理は基本的には非同期処理となっています。しかし、簡単な処理であれば非同期処理である必要がない、もしくは同期処理のほうが扱いやすいといった場合も出てくるでしょう。

特にファイルの作成等は非同期処理よりも同期処理の方が扱いやすいと思います。

Node.jsの関数にはこういった場合に対処できるようにそれぞれの非同期処理関数に対して同期処理を可能にする関数も用意されています。

基本的には、関数の名前の語尾に対して「Sync()」を付けるのみです。Syncは同期という意味なので直感的にも覚えやすいのが良いですね。

//モジュールの読み込み
var fs = require('fs');
//フォルダを同期処理で作成
if (!fs.existsSync("test")) {
  fs.mkdirSync("test");
  console.log("testフォルダを作成しました");
} else {
  console.log("testフォルダは既に存在しています");
}

これを実行すると以下のようになります。

$ node mkdir.js
testフォルダを作成しました
$ node mkdir.js
testフォルダは既に存在しています

このように簡単に同期処理も実行できるようになっています。

まとめ

・Node.jsのネットワークやファイル操作に関する関数は基本的には非同期処理で実行される。

・「***Sync()」を付ければ同期処理として実行できる。

Node.jsはまだ触り始めたばかりなので細かい部分もしっかり復習しつつ新しいことを覚えていきたいですね。

スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です