首頁  >  文章  >  web前端  >  node.js中EventEmitter類別各種用法程式碼詳解

node.js中EventEmitter類別各種用法程式碼詳解

伊谢尔伦
伊谢尔伦原創
2017-07-24 10:53:351500瀏覽

EventEmitter類別

在Node.js的用於實作各種事件處理的event模組中,定義了一個EventEmitter類別。所有可能觸發事件的對像都是一個整合了EventEmitter類別的子類別的實例對象,在Node.js中,為EventEmitter類別定義了許多方法,所有與對象的事件處理函數的綁定及解除相關的處理均依靠這些方法的呼叫來執行。

event:代表事件名稱

listener:代表事件處理函數

中括號內的參數代表該參數為可選參數

EventEmitter類別的on方法


#
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方法修改最多可以綁定的事件處理函數數量,方法如下:


emitter.setMaxListeners(n)

EventEmitter類別的once方法






#EventEmiiter類別的once方法與on方法類似,作用均為對指定事件綁定事件處理函數,區別在於,當事件處理函數執行一次後立即被接觸,即該事件處理函數只會被執行一次。 once方法所用參數與on方法所用參數相同,如下:

emitter.once(event, listener)

做個試驗。

還是執行以下程式碼(同上):


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");

然後,在瀏覽器視窗中連續開啟兩次127.0.0.1:1337,控制台輸出如下:


顯示了兩個

然後將on事件修改為once事件,程式碼如下:



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");

控制台輸出如下:


請求處理2次,其餘只列印1次!

使用removeListener方法取消事件處理函數

#程式碼如下:


##

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");

執行程式碼,在瀏覽器視窗輸入127.0.0.1:1337,控制台輸出如下

###控制台輸出############emit方法:自訂事件並將其觸發############程式碼如下:############
var http = require("http");
var server = http.createServer();

server.on("request", function(req, res){
 console.log(req.url);
});

//自定义事件
server.on("customEvent", function(arg1, arg2, arg3){
 console.log("自定义事件被触发");
 console.log(arg1);
 console.log(arg2);
 console.log(arg3);
});

//触发自定义事件
server.emit('customEvent', '自定义参数1', '自定义参数2', '自定义参数3')
server.listen(1337, "127.0.0.1");
###這次不在瀏覽器視窗中輸入位址,直接執行程式碼查看控制台輸出,控制台輸出如下:############控制台輸出##########說明我們手動觸發了自訂事件,也就是customEvent。 ###

以上是node.js中EventEmitter類別各種用法程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn