nodejs學習之events

在node裏許多對象都發出事件:一個net.Server對象每次一個鏈接到來,都發出一個事件,一個fs.readStream對象在文件打開時放出一個事件.全部能放出事件的對象都是event.EventEmitter對象的實例.你能夠這樣作來訪問這個模塊:requre('events');
表明性的事件命名都是一個駝峯標識的字符串,然而這並非一個強制約束,任何字符串均可以被接受.
函數能夠被附加在對象上,而且當一個事件發出時被執行.這樣的函數叫作監聽函數.node


Class:events.EventEmitter
能夠這樣訪問events.EventEmitter類,require('events').EventEmitter.
當一個EventEmitter遇到一個錯誤時,典型的動做時發出一個error事件.在node裏面,error事件將會被做爲特殊狀況處理,若是沒有相應的監聽函數,默認的動做是打印堆棧信息,而後退出程序.
當全部的EventEmitter對象在添加新的監聽函數時都會發出newListener事件.
emitter.addListener(event,listener)
emitter.on(event,listener)
添加一個監聽函數到指定的事件的監聽函數數組的末尾.
server.on('connection', function (stream) {
console.log('someone connected!');
});
emitter.once(event,listener)
爲事件添加一個只執行一次的監聽函數.這個監聽函數只會在下次事件觸發時執行一次,以後將會被移除.
server.once('connection', function (stream) {
console.log('Ah, we have our first user!');
});
emitter.removeListener(event,listener)
在指定事件的監聽函數數組中移除一個監聽函數.注意:移除以後,將會改變在被移除監聽函數以後的其餘監聽函數的數組索引.
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
emitter.removeAllListeners([event])
不帶參數的話,會移除全部的監聽函數,但參數的話只移除指定事件的全部監聽函數.
注意:在以前使用emitter.listeners(event)得到的數組都將會無效.
emitter.setMaxListeners(n)
默認狀況下,若是一個事件的監聽函數超過10個,EventEmitters對象將會打印一個警告信息.這是一個發現內存溢出頗有用的方法.很明顯不是全部的Emitters對象都應該限制10個監聽器.這個函數將會容許增長限制個數,若是不想限制個數,能夠設置爲0.
emitter.listeners(event)
返回指定事件的監聽函數數組.
server.on('connection', function (stream) {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection'))); // [ [Function] ]
在事件機制下,這個數組是易變的,會保持和事件的監聽函數列表一直,然而,特定的動做(特別是removeAllListeners)將會是這個索引無效.
若是你須要在指定的時間得到一個不會改變的監聽函數列表的copy,拿到一個副本,例如能夠這麼作:emitter.listeners(event).slice(0).
在node未來的release版本中,這個行爲將會改變成老是返回一個不變的copy,在你的程序中,請不要依賴經過數組的函數來修改EventEmitters的監聽函數.請老是使用'on'方法來添加一個新的監聽.

emitter.emit(event,[arg1],[arg2],[...])
根據提供的參數列表來順序執行每個監聽函數.

Event:'newListener'
event String,the event name,事件字符串,事件的名字.
listener function the event handler function 監聽函數,事件處理函數.
當任何一個對象(支持發出事件的)添加一個新監聽函數時,將會發出這個事件.數組

相關文章
相關標籤/搜索