nodejs學習之events

來源:互聯網
上載者:User

標籤:io   ar   使用   sp   檔案   on   log   cti   ad   

在node裡許多個物件都發出事件:一個net.Server對象每次一個串連到來,都發出一個事件,一個fs.readStream對象在檔案開啟時放出一個事件.所有能放出事件的對象都是event.EventEmitter對象的執行個體.你可以這樣做來訪問這個模組:requre(‘events‘);
代表性的事件命名都是一個駝峰標識的字串,然而這並不是一個強制限制式,任何字串都可以被接受.
函數可以被附加在對象上,並且當一個事件發出時被執行.這樣的函數叫做監聽函數.


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 監聽函數,事件處理函數.
當任何一個對象(支援發出事件的)添加一個新監聽函數時,將會發出這個事件.

nodejs學習之events

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.