ホームページ  >  記事  >  ウェブフロントエンド  >  Node.jsのEventEmitterクラスの各種使用コードを詳しく解説

Node.jsのEventEmitterクラスの各種使用コードを詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-24 10:53:351500ブラウズ

EventEmitterクラス

様々なイベント処理を実装するNode.jsのイベントモジュールには、EventEmitterクラスが定義されています。イベントをトリガーするすべてのオブジェクトは、EventEmitter クラスのサブクラスを統合するインスタンス オブジェクトです。Node.js では、オブジェクトのイベント処理関数のバインドとバインド解除に関連するすべての処理が、EventEmitter クラスに定義されています。これらのメソッドを呼び出します。

event: イベント名を表します

listener: イベント処理関数を表します

括弧内のパラメータは、パラメータがオプションのパラメータであることを表します

EventEmitterクラスのメソッドのメソッド


var http = require("http");
var server = http.createServer();
server.on("request", function(req, res){ 
 console.log(req.url); 
 res.end();
});
server.listen(1337, "127.0.0.1");

コード スニペットでは、サーバーがクライアント リクエストを受信すると、クライアントによってリクエストされたターゲットの URL アドレスをコンソール ウィンドウに出力し、応答オブジェクトの end メソッドを使用して応答を直ちに終了することを指定します。

コードを実行し、ブラウザ ウィンドウに http://localhost:1337:// と入力すると、コンソール出力は次のようになります:


コンソール出力

もちろん、複数の経由で実行することもできます。 on メソッド 複数のイベント ハンドラーを同じイベントにバインドします。次のように:


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

OK、コードを実行すると、コンソール出力は次のようになります:


コンソール出力

さらに、デフォルトでは、最大 10 個の時間処理関数を同じ指定された関数にバインドできますイベント 。 setMaxListeners メソッドを使用してバインドできるイベント処理関数の最大数を変更できます。メソッドは次のとおりです。 on メソッドと、指定されたイベントに対する両方の関数に似ています。イベント処理関数のバインドとの違いは、イベント処理関数が 1 回実行された直後に接続されること、つまり、イベント処理関数は 1 回だけ実行されることです。以下に示すように、once メソッドで使用されるパラメーターは on メソッドで使用されるパラメーターと同じです。


emitter.setMaxListeners(n)

実験を行ってください。 または、次のコードを実行します (上記と同じ):

emitter.once(event, listener)

次に、ブラウザ ウィンドウで 127.0.0.1:1337 を 2 回続けて開きます。コンソール出力は次のようになります。 2 回表示される

その後、on イベントを 1 回のイベントに変更します。コードは次のとおりです:

var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

コンソールの出力は次のとおりです:

リクエストは 2 回処理され、残りは出力されるだけです一度!

removeListener メソッドを使用してイベント ハンドラーをキャンセルします


コードは次のとおりです:

var http = require("http");
var server = http.createServer();

server.once('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.once('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");
コードを実行し、ブラウザ ウィンドウに 127.0.0.1:1337 と入力すると、コンソール出力は次のようになります。

コンソール出力

emitメソッド: イベントをカスタマイズしてトリガーします


コードは次のとおりです:

var http = require("http");
var server = http.createServer();
var testFunction = function (req,res) {
 console.log('发送响应完毕')
}

server.on('request', function(req, res){
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){
 console.log('处理客户端请求')
 console.log(req.url);
 res.end();
})

server.on('request', testFunction)
//删除
server.removeListener('request', testFunction)
server.listen(1337, "127.0.0.1");
今回は、ブラウザウィンドウにアドレスを入力する代わりに、コードを直接実行してコンソール出力を表示します。コンソール出力は次のとおりです。

コンソール出力
は、カスタム イベント (customEvent) を手動でトリガーしたことを示しています。

以上がNode.jsのEventEmitterクラスの各種使用コードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。