情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsにおける非同期的な処理の表現

Node.jsはスターベーションの問題を解決するためにイベントループを導入しているため、処理を非同期的な処理として記述しなければならない場面が非常に多いです。

では、Node.jsにおいて非同期的な処理はどのように表現すれば良いのでしょうか?

Node.jsでは非同期的な処理の表現として標準で下の2つをサポートしています。

  • 非同期コールバック関数
  • 非同期イベント

非同期コールバック関数

コールバック関数とは関数が引数として受け取り、適切なタイミングで呼び出す関数です。

非同期コールバック関数はコールバック関数の中でも非同期的に呼び出される関数を言います。

Node.jsにおいては関数は非同期コールバック関数を最後の引数として受け取るのが普通です。

また、非同期コールバック関数の第1引数はエラーオブジェクトとし、第2引数は処理の結果とするのが普通です。

すなわち、Node.jsにおいて非同期コールバック関数を引数として受け取る関数を実装する場合には下のような形にします。

function asyncfunc (arg1, arg2, callback) {
    callback(null, 'xxx');
    //or
    callback(new Error('yyy'), null);
}

処理が正常に完了した場合には非同期コールバック関数の第1引数にはnullを指定し、第2引数には処理の結果を指定します。

処理の実行中にエラーが発生した場合には第1引数にはエラーオブジェクトを指定し、第2引数にはnullを指定します。

ただし、上では表記上の都合から非同期コールバック関数を関数の冒頭で呼び出すように表記していますが、実際には関数内の適切な場所で呼び出す必要があります

非同期イベント

イベントとはオブジェクトが特定のタイミングで発生させるものであり、オブジェクトを使用する側はイベントが発生した際に実行される処理を登録したり、登録解除したりすることができます。

非同期イベントはイベントの中でも非同期的に発生するものを言います。

Node.jsにおいてはeventsというイベントを処理するためのモジュールが標準で提供されています。

処理の実行中にエラーが発生した場合にはエラーイベントと呼ばれる特別なイベントを発生させます。

また、イベントを発生させるべきタイミングが到来した場合には普通のイベントを発生させます。

イベントの使用方法に関しては下の記事を参照してください。

非同期コールバック関数と非同期イベント

非同期コールバック関数は単に非同期的な処理を行い、結果を返すという単純な非同期的な処理の場合に適しています。

一方で、非同期イベントは非同期的な処理を複数の段階を経て行ったり、継続的に行ったりして、複数の種類の結果を何度も返すというような複雑な非同期的な処理の場合に適しています。

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js