Node.js の EventEmitter の 使い方

0 件のコメント

Node.js で イベント処理の実装を行う場合、 EventEmitter を利用します。 今回はその EventEmitter の使い方として実装方法と利用方法をまとめました。

Node.js におけるイベント処理

一般的に MVCパターン や イベント駆動 プログラム を実装する場合、 observerパターンを利用します。

observerパターン

Node.js ではよく非同期処理を実装しますが、非同期処理でよくイベント駆動パターンが実装されます。 イベント処理はいわゆる先述した observer パターン で実装されますが、Node.js における具体的な実装は EventEmitter になります。

EventEmitterを使った実装例

イベント処理したいクラスは EventEmitter を継承することで基本的なイベント処理が可能になります。 イベントを発行する場合は EventEmitter.emit() を利用して呼び出し、イベントにアタッチするときは EventEmitter.on() でアタッチします。

以下では具体的なサンプルコードを掲載して実装方法と利用方法を見ていきます。

EventEmitter を継承した モジュール の作成

sample.js

var EventEmitter = require("events").EventEmitter;
var util = require("util");

var SampleClass = function () {
};
util.inherits(SampleClass, EventEmitter);

SampleClass.prototype.say = function (message) {
  process.nextTick(()=>{
    this.emit("executed", null, message);
  })
};

module.exports = SampleClass;

L.6
EventEmitter の継承には util.inherits() を利用します。 独自クラスを宣言した後、 util.inherits(子クラス, 親クラス) で指定します。

L.10
EventEmitter を継承すると .emit() メソッドが利用できるようになります。 .emit() メソッドを呼び出すと指定したイベント名のイベントが発行されます。

EventEmitter を継承した モジュール の利用

index.js

var SampleClass = require("./sample");

var obj = new SampleClass();
obj.on("executed", (error, message) => {
  console.log(message);
});

obj.say("Hello World !");

L.3
EventEmitter を継承したクラスはインスタンス生成して利用します。

L.4
生成したインスタンスメソッドに EventEmitter から継承される .on() メソッドがあるので、これを利用することでイベントへコールバックをアタッチできます。

参考記事