国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

node.js中的事件處理機制詳解

2019-11-19 18:48:58
字體:
來源:轉載
供稿:網友

EventEmitter類

在Node.js的用于實現各種事件處理的event模塊中,定義了一個EventEmitter類。所有可能觸發事件的對象都是一個集成了EventEmitter類的子類的實例對象,在Node.js中,為EventEmitter類定義了許多方法,所有與對象的事件處理函數的綁定及解除相關的處理均依靠這些方法的調用來執行。

EventEmitter類的各種方法

event:代表事件名

listener:代表事件處理函數

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

方法名與參數 描述
addListener(event,listener)  對指定事件綁定事件處理函數
on(event, listener)  對指定事件綁定事件處理函數(addListener方法的別名)
once(event, listener)  對指定事件指定只執行一次的事件處理函數
removeListener(event, listener)  對指定事件接觸事件處理函數
setMaxListeners(n)  指定事件處理函數的最大數量,n為正數值,代表最大的可指定事件處理函數的數量
listeners(event)  獲取指定事件的所有事件處理函數
emit(event, [arg1], [arg2], [...])  手工觸發指定事件

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能有所幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临清市| 仙居县| 河津市| 土默特左旗| 彭水| 闵行区| 阜平县| 咸宁市| 新昌县| 北票市| 长子县| 新源县| 奈曼旗| 晋城| 衡阳市| 宝应县| 安顺市| 鹤壁市| 成安县| 钟祥市| 太仆寺旗| 灌阳县| 出国| 太湖县| 湘阴县| 恩施市| 阳山县| 灯塔市| 绥棱县| 枞阳县| 霸州市| 工布江达县| 闽清县| 手游| 吕梁市| 若尔盖县| 东山县| 滦平县| 冀州市| 房山区| 西乡县|