創建文件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 事件的對象設置監聽器,避免遇到錯誤后整個程序崩潰