參考內容:
Node.js EventEmitter
四摹蘑、Node.js EventEmitter
Node.js所有異步I/O操作在完成時都會發(fā)送一個事件到事件隊列;
Node.js里許多對象都會分發(fā)事件:一個net.Server對象會在每次有新連接時分發(fā)一個事件萧吠,一個fs.readStream對象會在文件被打開時發(fā)出一個事件上鞠。所有這些產生事件的對象都是events.EventEmitter的實例停忿。
EventEmitter類
- events模塊只提供了一個對象:events.EventEmitter,它的核心是事件觸發(fā)與事件監(jiān)聽器功能的封裝色难。可以通過
require('events');
來訪問該模塊等缀。
// 引入events模塊
var events = require('events');
// 創(chuàng)建eventEmitter對象
var eventEmitter = new events.EventEmitter();
- EventEmitter對象如果在實例化時發(fā)生錯誤枷莉,會觸發(fā)error事件;當添加新監(jiān)聽器時尺迂,newListener事件會觸發(fā)笤妙;當監(jiān)聽器被移除時,removeListener事件被觸發(fā)噪裕。該對象用法如下:
// 2.4.event.js文件
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
event.on('some_event', function() {
console.log('some_event 事件觸發(fā)');
});
setTimeout(function() {
event.emit('some_event');
}, 1000);
-
運行代碼蹲盘,1s后控制臺輸出'some_event 事件觸發(fā)'。原理是event對象注冊了事件some_event的一個監(jiān)聽器膳音,然后我們通過serTimeout在1000毫秒后向event對象發(fā)送事件some_event召衔,此時調用some_event的監(jiān)聽器。
EventEmitter的每個事件由一個事件名和若干參數(shù)組成祭陷,事件名是一個字符串苍凛,通常表達一定的語義;對于每個事件颗胡,Event Emitter支持若干個事件監(jiān)聽器毫深。
當事件觸發(fā)時,注冊到這個事件的監(jiān)聽器被依次調用毒姨,事件參數(shù)作為回調函數(shù)參數(shù)傳遞哑蔫。
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('someEvent', function(arg1, arg2) {
console.log('listener1', arg1, arg2);
});
emitter.on('someEvent', function(arg1, arg2) {
console.log('listener2', arg1, arg2);
});
emitter.emit('someEvent', 'arg1參數(shù)', 'arg2參數(shù)');
方法
NO. | 方法&描述(詳情見參考鏈接) |
---|---|
1 | addListener(event, listener) 為指定事件添加一個監(jiān)聽器到監(jiān)聽器數(shù)組的尾部。 |
2 | on(event, listener) 為指定事件注冊一個監(jiān)聽器,接受一個字符串event和一個回調函數(shù)闸迷。 |
3 | once(event, listener) 為指定事件注冊一個單次監(jiān)聽器嵌纲,即監(jiān)聽器最多只會觸發(fā)一次,觸發(fā)后立刻解除該監(jiān)聽器腥沽。 |
4 | removeListener(event, listener) 移除指定事件的某個監(jiān)聽器逮走,監(jiān)聽器必須是該事件已經注冊過的監(jiān)聽器。 它接受兩個參數(shù)今阳,第一個是事件名稱师溅,第二個是回調函數(shù)名稱。 |
5 | removeAllListener([event]) 移除所有事件的所有監(jiān)聽器盾舌,如果指定事件墓臭,則移除指定事件的所有監(jiān)聽器。 |
6 | setMaxListener(n) 默認情況下妖谴, EventEmitters 如果你添加的監(jiān)聽器超過 10 個就會輸出警告信息窿锉。 setMaxListeners 函數(shù)用于提高監(jiān)聽器的默認限制的數(shù)量。 |
7 | listeners(event) 返回指定事件的監(jiān)聽器數(shù)組膝舅。 |
8 | emit(event, [arg1], [arg2], [...]) 按參數(shù)的順序執(zhí)行每個監(jiān)聽器嗡载,如果事件有注冊監(jiān)聽返回 true,否則返回 false仍稀。 |
類方法
NO. | 方法&描述(詳情見參考鏈接) |
---|---|
1 | listenerCount(emitter, event) 返回指定事件的監(jiān)聽器數(shù)量洼滚。 |
其余參見參考內容鏈接