http://microjs.com をブラウズすると、「イベントエミッター」というラベルの付いたライブラリがたくさんあります。私はJavaScript言語の基本についての自分のやり方をかなりよく知っていると思うのが好きですが、「イベントエミッター」が何であるか、または何をするのかは本当にわかりません。
私を啓発したい人はいますか?それは面白そう...
誰でも聞くことができる event をトリガーします。異なるライブラリは異なる実装と異なる目的を提供しますが、基本的な考え方は、イベントを発行してそれらにサブスクライブするためのフレームワークを提供することです。
JQueryの例:
// Subscribe to event.
$('#foo').bind('click', function() {
alert("Click!");
});
// Emit event.
$('#foo').trigger('click');
ただし、jQueryを使用してイベントを発行するには、DOMオブジェクトが必要であり、任意のオブジェクトからイベントを発行することはできません。これは、イベントエミッターが役立つ場所です。 カスタムイベントをデモするための擬似コードをいくつか示します(上記とまったく同じパターン)。
// Create custom object which "inherits" from emitter. Keyword "extend" is just a pseudo-code.
var myCustomObject = {};
extend(myCustomObject , EventEmitter);
// Subscribe to event.
myCustomObject.on("somethingHappened", function() {
alert("something happened!");
});
// Emit event.
myCustomObject.emit("somethingHappened");
Node.jsでは、イベントは、対応するコールバックを備えた文字列として簡単に説明できます。イベントは複数回「発行」する(つまり、対応するコールバックを呼び出す)ことも、最初に発行するときのみリッスンすることもできます。
例:-
var example_emitter = new (require('events').EventEmitter);
example_emitter.on("test", function () { console.log("test"); });
example_emitter.on("print", function (message) { console.log(message); });
example_emitter.emit("test");
example_emitter.emit("print", "message");
example_emitter.emit("unhandled");
> var example_emitter = new (require('events').EventEmitter);
{}
> example_emitter.on("test", function () { console.log("test"); });
{ _events: { test: [Function] } }
> example_emitter.on("print", function (message) { console.log(message); });
{ _events: { test: [Function], print: [Function] } }
> example_emitter.emit("test");
test //console.log'd
true //return value
> example_emitter.emit("print", "message");
message //console.log'd
true //return value
> example_emitter.emit("unhandled");
false //return value
これは、EventEmitter
のすべての基本機能を実証します。 on or addListener
メソッド(基本的にサブスクリプションメソッド)を使用すると、監視するイベントと呼び出すコールバックを選択できます。一方、emit
メソッド(publishメソッド)を使用すると、イベントを「発行」できます。これにより、イベントに登録されたすべてのコールバックが「発火」します(呼び出されます)。
ソースから イベントエミッターとは
node.jsの簡単な例:
var EventEmitter = require('events').EventEmitter;
var concert = new EventEmitter;
var singer = 'Coldplay';
concert.on('start', function (singer) {
console.log(`OMG ${singer}!`);
});
concert.on('finish', function () {
console.log(`It was the best concert in my life...`);
});
concert.emit('start', singer);
concert.emit('finish');
コールバック関数を検討してください-
function test(int a, function(){
console.log("I am call-back function");
}){
console.log("I am a parent function");
}
これで、親関数がイベント(ボタンクリックまたは任意の接続など)で呼び出されるたびに、最初にそのコードが実行され、次に制御がコールバック関数に渡されます。現在、イベントエミッタは、何らかのアクションが発生するとすぐにイベントをトリガーし、コントロールを親関数に渡すオブジェクト/メソッドです。たとえば、サーバーはNode.Jsプログラミングのイベントエミッターです。サーバーがエラーを検出するとすぐにエラーイベントが発生し、コントロールがエラーの親関数に渡されます。サーバーは、ソケットがサーバーに接続されるとすぐに接続イベントを発行し、このイベントはgetConnectionsの親関数をトリガーします。これは実際にコールバック関数も引数として受け取ります。したがって、それは確かにチェーンであり、機能の実行を開始するイベントを発行するイベントエミッターによって何かが発生したときにトリガーされます。