http://nodejs.org/api/events.htmljavascript
http://www.infoq.com/cn/articles/tyq-nodejs-eventhtml
events是node.js 最重要的模塊,events模塊只提供了一個對象events.EventEmitter,EventEmitter 的核心是事件發射與事件監聽器。java
Node.js中大部分的模塊,都繼承自Event模塊。node
與DOM樹上事件不一樣,不存在事件冒泡、逐層捕獲等行爲。api
EventEmitter 支持若干個事件監聽器。當事件發射時,註冊到這個事件的事件監聽器被依次調用,事件參數做爲回調函數參數傳遞。 函數
/* 調用events模塊,獲取events.EventEmitter對象 */ var EventEmitter = require('events').EventEmitter; var ee = new EventEmitter(); /* EventEmitter.on(event, listener) 爲事件註冊一個監聽 參數1:event 字符串,事件名 參數2:回調函數 */ ee.on('some_events', function(foo, bar) { console.log("第1個監聽事件,參數foo=" + foo + ",bar="+bar ); }); console.log('第一輪'); ee.emit('some_events', 'Wilson', 'Zhong'); console.log('第二輪'); ee.emit('some_events', 'Wilson', 'Z'); EventEmitter.on(event, listener) 示例源碼/* EventEmitter.emit(event, [arg1], [arg2], [...]) 觸發指定事件 參數1:event 字符串,事件名 參數2:可選參數,按順序傳入回調函數的參數 返回值:該事件是否有監聽 */ee.on('some_events', function(foo, bar) { console.log("第1個監聽事件,參數foo=" + foo + ",bar="+bar ); });var isSuccess = ee.emit('some_events', 'Wilson', 'Zhong');/* EventEmitter.once(event, listener) 爲事件註冊一次性監聽,觸發一次後移除監聽 參數1:event 字符串,事件名 參數2:回調函數 */ee.once('some_events', function(foo, bar) { console.log("第1個監聽事件,參數foo=" + foo + ",bar="+bar ); }); console.log('第一輪'); ee.emit('some_events', 'Wilson', 'Zhong'); console.log('第二輪'); var isSuccess = ee.emit('some_events', 'Wilson', 'Zhong'); console.log(isSuccess);/* EventEmitter.removeListener(event, listener) 移除指定事件的監聽器 注意:該監聽器必須是註冊過的 PS:上一個例子以後以會失敗,很大緣由就是忽略了監聽器,理所固然的認爲傳個事件名就OK了,因此就悲劇了! */var listener = function(foo,bar) { console.log("第1個監聽事件,參數foo=" + foo + ",bar="+bar ); }ee.on('some_events', listener);ee.removeListener('some_events', listener);/* EventEmitter.removeAllListeners([event]) 移除(批定事件)全部監聽器 參數1:可選參數,event 字符串,事件名 */ ee.removeAllListeners('some_events');
/*EventEmitter.removeAllListeners([event])不用事件名直接執行,移除全部監聽函數*/ee.removeAllListeners();
用的比較少的就不詳細說了ui
EventEmitter.defaultMaxListenersspa
EventEmitter.defaultMaxListeners功能與setMaxListeners相似,
給全部EventEmitter設置最大監聽
setMaxListeners優先級大於defaultMaxListenershtm
EventEmitter.listenerCount(emitter, event)對象
返回指定事件的監聽數
特殊的事件Error
引用自Node.js開發指南:EventEmitter 定義了一個特殊的事件 error,它包含了「錯誤」的語義,咱們在遇到 異常的時候一般會發射 error 事件。當 error 被髮射時,EventEmitter 規定若是沒有響 應的監聽器,Node.js 會把它看成異常,退出程序並打印調用棧。咱們通常要爲會發射 error 事件的對象設置監聽器,避免遇到錯誤後整個程序崩潰。