events 模塊只提供了一個物件: events.EventEmitter,EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝,
你可以通過require("events");來訪問該模塊,
//引入events模塊 var events=require("events"); //創建EventEmitter()物件 var eventEmitter=new events.EventEmitter();
EventEmitter 物件如果在實體化時發生錯誤,會觸發 error 事件,
當添加新的監聽器時,newListener 事件會觸發,當監聽器被移除時,removeListener 事件被觸發,
//引入events模塊 var events=require("events"); //創建EventEmitter()物件 var eventEmitter=new events.EventEmitter(); eventEmitter.on("myfn",function(){ console.log("myfn被觸發了"); }) setTimeout(function(){ eventEmitter.emit("myfn");//觸發事件 },1000)

帶引數的情況
//引入events模塊 var events=require("events"); //創建EventEmitter()物件 var eventEmitter=new events.EventEmitter(); eventEmitter.on("myfn",function(n1,n2){ console.log(n1+n2); }) setTimeout(function(){ eventEmitter.emit("myfn",3,4);//觸發事件 },1000)

EventEmitter() 提供的方法:
addListener(event, listener)
為指定事件添加一個監聽器到監聽器陣列的尾部,
on(event, listener)
為指定事件注冊一個監聽器,接受一個字串 event 和一個回呼函式,
server.on('connection', function (stream) {
console.log('someone connected!');
});
once(event, listener)
為指定事件注冊一個單次監聽器,即 監聽器最多只會觸發一次,觸發后立刻解除該監聽器,
server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
removeListener(event, listener)
移除指定事件的某個監聽器,監聽器必須是該事件已經注冊過的監聽器,
它接受兩個引數,第一個是事件名稱,第二個是回呼函式名稱,
var callback = function(stream) { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback);
removeAllListeners([event])
移除所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器,
setMaxListeners(n)
默認情況下, EventEmitters 如果你添加的監聽器超過 10 個就會輸出警告資訊, setMaxListeners 函式用于提高監聽器的默認限制的數量,
listeners(event)
回傳指定事件的監聽器陣列,
emit(event, [arg1], [arg2], [...])
按監聽器的順序執行執行每個監聽器,如果事件有注冊監聽回傳 true,否則回傳 false,
類方法:
listenerCount(emitter, event)
回傳指定事件的監聽器數量,
events.emitter.listenerCount(eventName)
//引入events模塊 var events=require("events"); //創建EventEmitter()物件 var eventEmitter=new events.EventEmitter(); var count=eventEmitter.listenerCount("connection"); console.log("connection事件的監聽器數量"+count);
事件:
newListener
-
event - 字串,事件名稱
-
listener - 處理事件函式
該事件在添加新監聽器時被觸發,
//引入events模塊 var events=require("events"); //創建EventEmitter()物件 var eventEmitter=new events.EventEmitter(); //監聽器listener1 var listener1=function listener1(){ console.log("監聽器listener1執行") } //監聽器listener2 var listener2=function listener2(){ console.log("監聽器listener2執行") } //為connection事件系結兩個監聽器 eventEmitter.on("connection",listener1); eventEmitter.on("connection",listener2); //列印監聽器數量 var count=eventEmitter.listenerCount("connection"); console.log("connection事件的監聽器數量"+count); //觸發connection事件 eventEmitter.emit("connection"); //移除監聽器listener1 eventEmitter.removeListener("connection",listener1); console.log("監聽器listener1不再監聽"); //觸發connection事件 eventEmitter.emit("connection"); //移除監聽器listener2 eventEmitter.removeListener("connection",listener2); console.log("監聽器listener2不再監聽"); //再次列印監聽器數量 count=eventEmitter.listenerCount("connection"); console.log("connection事件的監聽器數量"+count); console.log("結束");

removeListener
-
event - 字串,事件名稱
-
listener - 處理事件函式
從指定監聽器陣列中洗掉一個監聽器,需要注意的是,此操作將會改變處于被刪監聽器之后的那些監聽器的索引,
EventEmitter 定義了一個特殊的事件 error,它包含了錯誤的語意,我們在遇到 例外的時候通常會觸發 error 事件,
當 error 被觸發時,EventEmitter 規定如果沒有響 應的監聽器,Node.js 會把它當作例外,退出程式并輸出錯誤資訊,
我們一般要為會觸發 error 事件的物件設定監聽器,避免遇到錯誤后整個程式崩潰,
//引入events模塊 var events=require("events"); //創建EventEmitter()物件 var eventEmitter=new events.EventEmitter(); //觸發error eventEmitter.emit("error");

大多數時候我們不會直接使用 EventEmitter,而是在物件中繼承它,
包括 fs、net、 http 在內的,只要是支持事件回應的核心模塊都是 EventEmitter 的子類,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/143518.html
標籤:JavaScript
上一篇:WEB之CSS系列筆記
