1. 程式人生 > >node 事件監聽器

node 事件監聽器

gpo 舉例 node.js admin dmi 命名 再次 add 錯誤

創建文件events.js,依次寫入下列代碼:

事件模塊引入與實例化監聽器

// 引入事件模塊
var e = require(‘events‘);
// 實例化事件監聽
var emitter = new e.EventEmitter();

方法

一、on(event, callback) 註冊監聽事件

emitter.on(‘test‘, function (arg) {
    console.log(‘test1觸發,傳入參數為:‘ + arg);
});

emitter.on(‘test‘, function (arg) {
    console.log(‘test2觸發,傳入參數為:‘ + arg);
});

emitter.on(
‘test‘, function (arg) { console.log(‘test3觸發,傳入參數為:‘ + arg); }); // 同一個監聽事件可註冊多個響應

二、addListener(event, callback) 添加一個監聽器到監聽器數組的尾部

emitter.addListener(‘test‘, function (arg) {
    console.log(‘新增test4觸發,傳入參數為:‘ + arg);
})

// 將自動添加為  “test”  監聽事件的最後一個

三、emit(event,[arg1],[arg2],[arg3]...) 觸發監聽事件

emitter.emit(‘test‘, ‘admin‘);

命令行運行node events.js,輸出如圖:

技術分享圖片

(相同命名的監聽事件將按順序依次觸發執行)

四、once(event, callback) 註冊單次監聽器

emitter.once(‘onceEvent‘, function (count) {
    console.log(‘單次監聽器觸發,二次將不存在‘ + count);
})

emit(event) 觸發監聽事件

emitter.emit(‘onceEvent‘, 1); // 執行
emitter.emit(‘onceEvent‘, 2); // 不再執行

命令行運行 ↑(上建),輸出如圖:

技術分享圖片

(once註冊的監聽事件僅執行一次後,將被自動移除,二次執行將不會再觸發事件)

五、removeListener(event,callback) 移除指定監聽事件

// 為test再次創建一個監聽事件
function callback(arg) {
    console.log(‘test5觸發,傳入參數為:‘ + arg + ‘\n‘);
}
emitter.on(‘test‘, callback);

// 再次觸發test
emitter.emit(‘test‘, ‘admin‘);

// 移除剛剛為創建的test監聽事件
emitter.removeListener(‘test‘, callback);

// 再次觸發test
emitter.emit(‘test‘, ‘admin‘);

命令行運行 ↑(上建),輸出如圖:

技術分享圖片

六、listeners(event) 返回指定事件的監聽器數組

var listenArry = emitter.listeners(‘test‘);
console.log(listenArry.length);

將輸出:

技術分享圖片

七、【類方法】listenerCount(emitter, event); 返回指定事件的監聽器數量

var listenArry = emitter.listeners(‘test‘);
var count = e.listenerCount(emitter, ‘test‘);
console.log(listenArry.length, count);

將輸出:

技術分享圖片

八、removeAllListeners()移除所有監聽器或 removeAllListeners(event) 移除指定事件的所有監聽器

emitter.removeAllListeners(‘test‘); // 移除test上的所有監聽器
emitter.removeAllListeners(); // 移除所有監聽器

九、setMaxListeners(n) 更改監聽器默認限制(監聽器默認上限為10個,超過後會輸出警告)

例如在 “二” 代碼前添加:

emitter.setMaxListeners(3);

將輸出警告:

技術分享圖片

(該函數一般用於提高默認監聽器限制,此為舉例,不提倡降低)

事件

一、(‘newListener‘,listener ) 該事件在添加新監聽器時被觸發

var i = 0;
emitter.on(‘newListener‘, function () {
    i++;
    console.log(‘第‘ + i + ‘次添加監聽器成功‘);
})

輸出結果為:

技術分享圖片

二、(‘removeListener‘,listener ) 該事件在監聽器被移除時觸發

var remove = 0;
emitter.on(‘removeListener‘, function () {
    remove++;
    console.log(‘第‘ + remove + ‘次移除監聽器成功‘);
})

輸出結果為:

技術分享圖片

(這是在剛才的once註冊事件前添加的代碼,此結果也驗證了,once是在執行添加成功後,立刻將該監聽器移除了,因此該監聽器只會執行一次)

error 事件

error觸發:遇到異常時將自動觸發

error事件處理:EventEmitter 規定如果沒有響應的監聽器,Node.js 會把它當作異常,退出程序並輸出錯誤信息

因此建議為會觸發 error 事件的對象設置監聽器,避免遇到錯誤後整個程序崩潰

node 事件監聽器