EventEmitter事件觸發(fā)器

2018-07-11 09:33 更新
Node 中的很多對(duì)象都會(huì)觸發(fā)事件,例如:一個(gè)TCP 服務(wù)器在收發(fā)每個(gè)數(shù)據(jù)流時(shí)都觸發(fā)事件;子進(jìn)程在退出時(shí) 會(huì)觸發(fā)事件。所有能夠觸發(fā)事件的對(duì)象都是events.EventEmitter 的實(shí)例。

事件命名方式使用大小寫分隔的風(fēng)格。例如:'stream', 'data', 'messageBegin'。 可以將函數(shù)注冊(cè)給對(duì)象,使其在事件觸發(fā)時(shí)執(zhí)行, 此類函數(shù)被稱作‘監(jiān)聽器‘。

通過調(diào)用require('events').EventEmitter, 我們可以使用EventEmitter(事件觸發(fā)器)類。 當(dāng)向EventEmitters(事件觸發(fā)器)對(duì)象上注冊(cè)新的時(shí)間監(jiān)聽器時(shí),都會(huì)觸發(fā)'newListener'事件。 當(dāng)事件觸發(fā)器過程中出現(xiàn)錯(cuò)誤時(shí),典型的處理方式是它將觸發(fā)一個(gè)'error'事件。Error 事件的特殊性在于:如果 沒有函數(shù)處理這個(gè)事件,它將會(huì)輸出調(diào)用堆棧,并隨之退出應(yīng)用程序。

Event: 'newListener'

function (event, listener) { }

該事件在添加新監(jiān)聽器時(shí)被觸發(fā)。

Event: 'error'

function (exception) { }

如果發(fā)生錯(cuò)誤,'error'事件將會(huì)被觸發(fā)。這是一個(gè)特殊事件,如果沒有相應(yīng)的監(jiān)聽函數(shù)監(jiān)聽這個(gè)事件, node 將 會(huì)結(jié)束應(yīng)用程序的執(zhí)行并顯示異常堆棧。

emitter.on(event, listener)

向指定的事件監(jiān)聽器數(shù)組尾部添加一個(gè)新監(jiān)聽器。

server.on('stream', function (stream) {
console.log('someone connected!');
});

emitter.removeListener(event, listener)

從指定監(jiān)聽器數(shù)組中刪除一個(gè)監(jiān)聽器。需要注意的是,此操作將會(huì)改變處于被刪監(jiān)聽器之后的那些監(jiān)聽器的索 引。

var callback = function(stream) {
console.log('someone connected!');
};
server.on('stream', callback);
// ...
server.removeListener('stream', callback);

emitter.removeAllListeners(event)

刪除指定事件的所有監(jiān)聽器。

emitter.listeners(event)

返回指定事件的監(jiān)聽器數(shù)組。你可以操作數(shù)組的內(nèi)容,比如說刪除一個(gè)監(jiān)聽器。

server.on('stream', function (stream) {
console.log('someone connected!');
});
console.log(sys.inspect(server.listeners('stream'));
// [ [Function] ]
emitter.emit(event, [arg1], [arg2], [...])

使用所提供的參數(shù),依次執(zhí)行事件監(jiān)聽器數(shù)組中的每一個(gè)監(jiān)聽函數(shù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)