NodeJSのeventsモジュール
7676 ワード
記事の目次 1 Eventsモジュール 1.1概要 1.1.1基本用法 1.1.2 on方法 1.1.3 emit方法 .EventEmitterインターフェースの展開 1.3イベントタイプ 1.4 EventEmitterの例の方法 1.4.1オンス方法 .removeListener方法 .removeAllListeners方法 1.4.4 listener方法 1 Eventsモジュール
1.1概要
1.1.1基本的な使い方 このモジュールは、 の任意のオブジェクトは、指定されたイベントを発行することができ、
1.1.2 on方法
デフォルトの場合、
EventEmitterの例の
Eventsモジュールはデフォルトで二つのイベントをサポートします. newListenerイベント:新しいコールバック関数を追加すると、トリガ が起動されます. RemoveListenerイベント:コールバックを除去するときにトリガ
1.4 EventEmitterの例の方法
1.4.1オンス方法
この方法はon法と類似しているが、コールバック関数は一回だけトリガされる.
1.4.2 removeListener方法
この方法は
この方法は、あるイベントのすべてのコールバック関数を削除します.
この方法は、
1.1概要
1.1.1基本的な使い方
Events
モジュールは、Nodeによる「発行/購読」モード(publish/subscribe
)の実現である.一つのオブジェクトはこのモジュールを通して、他のオブジェクトにメッセージを伝えます.EventEmitter
を介して構成関数を提供する.このコンストラクタの例は、指定されたイベントを傍受するために使用できるon
方法を有し、コールバック関数をトリガする.EventEmitter
の例のon方法によって傍受される.次の例では、まずメッセージセンターを作成し、その後、on方法によって、各種イベントのためのコールバック関数を指定して、プログラムをイベント駆動型に変更し、各モジュール間でイベントを通じて連絡します.var EventEmitter = require('events').EventEmitter;
var ee = new EventEmitter();
ee.on('someEvent', function () {
console.log('event has occured');
});
function f() {
console.log('start');
ee.emit('someEvent');
console.log('end');
}
f()
// start
// event has occured
// end
上記のコードは、events
モジュールをロードした後、EventEmitter
を介してEventEmitter
の例を確立し、この例はメッセージセンターであり、on
方法によってsomeEvent
イベントのためのコールバック関数を指定した後、emit
方法によってsomeEvent
をトリガする.上記のコードも、EventEmitter
のイベントトリガと傍受が同期されていることを示している.1.1.2 on方法
デフォルトの場合、
Node.js
は、同じイベントを最大10
に指定できるようにする.ee.on("someEvent", function () { console.log("event 1"); });
ee.on("someEvent", function () { console.log("event 2"); });
ee.on("someEvent", function () { console.log("event 3"); });
10個以上のコールバック関数が警告されます.このしきい値はsetMaxListeners
によって変更できる.ee.setMaxListeners(20);
1.1.3 eit方法EventEmitterの例の
emit
は、イベントをトリガするために使用される.その最初のパラメータはイベント名で、残りのパラメータは順次コールバック関数に伝えられます.var EventEmitter = require('events').EventEmitter;
var myEmitter = new EventEmitter;
var connection = function(id){
console.log('client id: ' + id);
};
myEmitter.on('connection', connection);
myEmitter.emit('connection', 6);
1.2 EventEmitterインターフェースの配置Events
モジュールの役割は、他のモジュールがEventEmitter
を配置してもよく、メッセージを定期購読して発表することができることでもある.var EventEmitter = require('events').EventEmitter;
function Dog(name) {
this.name = name;
}
Dog.prototype.__proto__ = EventEmitter.prototype;
//
// Dog.prototype = Object.create(EventEmitter.prototype);
var simon = new Dog('simon');
simon.on('bark', function(){
console.log(this.name + ' barked');
});
setInterval(function(){
simon.emit('bark');
}, 500);
上のコードは、構造関数Dog
を新規に作成し、EventEmitter
を継承させるので、DocgはEventEmitterのインターフェースを持っています.最後に、Docgの例のためにBarkイベントの傍受関数を指定し、EventEmitter
のemit
方法を再使用して、bark
イベントをトリガする.Node
は、モジュールutil
を内蔵するinherits
方法を提供し、別の継承EventEmitter
を提供する.var util = require('util');
var EventEmitter = require('events').EventEmitter;
var Radio = function(station) {
var self = this;
setTimeout(function() {
self.emit('open', station);
}, 0);
setTimeout(function() {
self.emit('close', station);
}, 5000);
this.on('newListener', function(listener) {
console.log('Event Listener: ' + listener);
});
};
util.inherits(Radio, EventEmitter);
module.exports = Radio;
上記のコードでは、Radioは構成関数であり、その例はEventEmitterインターフェースを継承している.以下はこのモジュールを使用した例です.var Radio = require('./radio.js');
var station = {
freq: '80.16',
name: 'Rock N Roll Radio',
};
var radio = new Radio(station);
radio.on('open', function(station) {
console.log('"%s" FM %s ', station.name, station.freq);
console.log('♬ ♫♬');
});
radio.on('close', function(station) {
console.log('"%s" FM %s ', station.name, station.freq);
});
1.3イベントタイプEventsモジュールはデフォルトで二つのイベントをサポートします.
ee.on("newListener", function (evtName){
console.log("New Listener: " + evtName);
});
ee.on("removeListener", function (evtName){
console.log("Removed Listener: " + evtName);
});
function foo (){}
ee.on("save-user", foo);
ee.removeListener("save-user", foo);
// New Listener: removeListener
// New Listener: save-user
// Removed Listener: save-user
上記のコードは、2回のnewListener
イベントと、removeListener
イベントをトリガします.1.4 EventEmitterの例の方法
1.4.1オンス方法
この方法はon法と類似しているが、コールバック関数は一回だけトリガされる.
var EventEmitter = require('events').EventEmitter;
var myEmitter = new EventEmitter;
myEmitter.once('message', function(msg){
console.log('message: ' + msg);
});
myEmitter.emit('message', 'this is the first message');
myEmitter.emit('message', 'this is the second message');
myEmitter.emit('message', 'welcome to nodejs');
上記のコードは3回のmessage
イベントをトリガしましたが、コールバック関数は1回目の起動時のみ実行されます.下のコードで指定します.サーバーが接続されると、一回だけのコールバック関数です.server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
この方法はEventEmitter
に戻るので、傍受関数をチェーンでロードすることができる.1.4.2 removeListener方法
この方法は
に用いられる.これは2つのパラメータを受け入れています.最初は
で、2番目は
です.つまり、匿名関数を削除するためには使用できません.var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
emitter.on('message', console.log);
setInterval(function(){
emitter.emit('message', 'foo bar');
}, 300);
setTimeout(function(){
emitter.removeListener('message', console.log);
}, 1000);
上のコードは300ミリ秒ごとにメッセージイベントをトリガし、1000ミリ秒後に傍受をキャンセルします.他の例は、removeListener
方法を用いてオンス方法をシミュレートすることである.var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
function onlyOnce () {
console.log("You'll never see this again");
emitter.removeListener("firstConnection", onlyOnce);
}
emitter.on("firstConnection", onlyOnce);
1.4.3 removeAllListeners方法この方法は、あるイベントのすべてのコールバック関数を削除します.
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
// some code here
emitter.removeAllListeners("firstConnection");
パラメータがない場合は、すべてのイベントを削除するすべてのコールバック関数を表します.emitter.removeAllListeners();
1.4.4 listener方法この方法は、
を
と呼び、イベントのすべてのコールバック関数からなる配列を返すことができる.var EventEmitter = require('events').EventEmitter;
var ee = new EventEmitter;
function onlyOnce () {
console.log(ee.listeners("firstConnection"));
ee.removeListener("firstConnection", onlyOnce);
console.log(ee.listeners("firstConnection"));
}
ee.on("firstConnection", onlyOnce)
ee.emit("firstConnection");
ee.emit("firstConnection");
// [ [Function: onlyOnce] ]
// []
上のコードは2回のコールバック関数からなる配列を示しています.最初は1つのコールバック関数OnlyOnceだけです.2回目は1つの空配列です.removeListener法がコールバック関数をキャンセルしたからです.