個人隨記--node(二)
阿新 • • 發佈:2018-11-08
EventEmitter 類
1,events 模組只提供了一個物件: events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。
2,EventEmitter 提供了多個屬性,如 on 和 emit。on 函式用於繫結事件函式,emit 屬性用於觸發一個事件。
物件建立 :
var eventEmitter = new events.EventEmitter();
程式碼示例:
var events = require("events"); //建立 eventEmitter 物件 var eventEmitter = new events.EventEmitter(); //建立事件處理程式 var connectHandler = function () { console.log("連線成功"); //觸發 data_received 事件 eventEmitter.emit("data_received"); } //繫結 connection 事件處理程式 eventEmitter.on("connection",connectHandler); //使用匿名函式繫結 data_received 事件 eventEmitter.on("data_received",function () { console.log("資料接收成功"); }); //觸發事件 服務啟動後,先執行此程式碼 eventEmitter.emit("connection"); console.log("程式執行完畢");
服務啟動後,利用emit觸發繫結的名稱為connection事件。然後進行整個程式的執行,connection事件又對data_received事件進行觸發。
除了立即觸發事件,也可以延遲觸發和間歇性觸發:
//3秒後執行
setTimeout(function() {
eventEmitter.emit('connection');
}, 3000);
//每隔3秒就會執行
setInterval(function () {
eventEmitter.emit('connection');
},3000);
注:同一個事件,可以新增多個監聽器。
//監聽器 listener1 和 listener2 var listener1 = function (){ console.log('監聽器 listener1 執行。'); } var listener2 = function (){ console.log('監聽器 listener2 執行。'); } //給connection事件繫結監聽器listener1和listener2 eventEmitter.addListener("connection", listener1); eventEmitter.addListener("connection", listener2);
EventEmitter 其他屬性
1,addListener(event, listener),和on(event, listener) 一樣,都是給事件新增一個監聽器,暫未發現不同
2,once(event, listener) 為指定事件註冊一個單次監聽器,即 監聽器最多隻會觸發一次,觸發後立刻解除該監聽器。
3,removeListener(event, listener) 移除指定事件的某個監聽器,監聽器必須是該事件已經註冊過的監聽器。
var events = require("events"); //建立 eventEmitter 物件 var eventEmitter = new events.EventEmitter(); //監聽器 listener1 和 listener2 var listener1 = function (){ console.log('監聽器 listener1 執行。'); } var listener2 = function (){ console.log('監聽器 listener2 執行。'); } //給connection事件繫結監聽器listener1和listener2 eventEmitter.addListener("connection", listener1); eventEmitter.addListener("connection", listener2); //觸發connection事件 此時,listener1和listener2 都會執行 eventEmitter.emit('connection'); //移除listener1監聽器 eventEmitter.removeListener("connection",listener1); console.log("listener1 被刪除"); //觸發connection事件 此時,只有listener2會執行 eventEmitter.emit('connection');
執行結果如下