はじめに
この記事では、標準ライブラリの使用方法の解説の一部をご紹介します。今回はEventEmitterを使用したサンプルプログラムを作成します。
ワークスペースの作成
下記コマンドでプログラムを格納するディレクトリを新たに作成します。
mkdir workspace/js/basic/02-standard-library/04-events
touch workspace/js/basic/02-standard-library/04-events/index.js
cd workspace/js/basic/02-standard-library/04-events
リスナーを登録しない場合
ソースコード
ソースコードの内容を下記に示します。
'use strict';
var events = require('events')
var eventEmitter = new events.EventEmitter()
console.log('1. emit `click` event:')
eventEmitter.emit('click')
console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')
console.log('3. end')
実行コマンド
実行コマンドを下記に示します。
node index.js
実行結果
実行結果を下記に示します。
1. emit `click` event:
2. emit `dblclick` event:
3. end
解説
EventEmitter
のオブジェクトを作成するにはnew events.EventEmitter()
を記述します。EventEmitter
のemit
メソッドはイベントを発行するためのメソッドで、第1引数にはイベント名が指定されます。なお、第2引数以降は後ほど解説するリスナーの引数になります。
リスナーを登録する場合
ソースコード
ソースコードの内容を下記に示します。
'use strict';
var events = require('events')
var eventEmitter = new events.EventEmitter()
eventEmitter.on('click', function () {
console.log('click!')
})
console.log('1. emit `click` event:')
eventEmitter.emit('click')
console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')
console.log('3. end')
実行コマンド
実行コマンドを下記に示します。
node index.js
実行結果
実行結果を下記に示します。
1. emit `click` event:
click!
2. emit `dblclick` event:
3. end
解説
今回はclick
イベントに対してリスナーを登録したので、実行結果にclick!
と表示されるようになりました。リスナーは関数だと思って差し支えないかと考えます。リスナーを登録するにはEventEmitter
オブジェクトのon
メソッドを使用します。
異なるイベントに複数のリスナーを登録する場合
ソースコード
ソースコードの内容を下記に示します。
'use strict';
var events = require('events')
var eventEmitter = new events.EventEmitter()
eventEmitter.on('click', function () {
console.log('click!')
})
eventEmitter.on('dblclick', function () {
console.log('double click!')
})
console.log('1. emit `click` event:')
eventEmitter.emit('click')
console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')
console.log('3. end')
実行コマンド
実行コマンドを下記に示します。
node index.js
実行結果
実行結果を下記に示します。
1. emit `click` event:
click!
2. emit `dblclick` event:
double click!
3. end
解説
EventEmitter
オブジェクトのon
メソッドの第1引数として、異なるイベント名を指定することで、異なるイベントに対して、それぞれリスナーを登録することが可能です。
同じイベントに複数のリスナーを登録する場合
ソースコード
ソースコードの内容を下記に示します。
'use strict';
var events = require('events')
var eventEmitter = new events.EventEmitter()
eventEmitter.on('click', function () {
console.log('click!')
})
eventEmitter.on('dblclick', function () {
console.log('double click!')
})
eventEmitter.on('click', function () {
console.log('click!!!!!')
})
console.log('1. emit `click` event:')
eventEmitter.emit('click')
console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')
console.log('3. end')
実行コマンド
実行コマンドを下記に示します。
node index.js
実行結果
実行結果を下記に示します。
1. emit `click` event:
click!
click!!!!!
2. emit `dblclick` event:
double click!
3. end
解説
同じイベントに対して複数のイベントを登録するにはEventEmitter
のon
メソッドをその数だけ呼び出します。emit
メソッドでイベントを発行する際、登録されている全てのリスナーに対してイベントが通知されます。
おわりに
次回は、Node.jsのモジュールの使用方法を学ぶためのサンプルプログラムを作成します。