Nodejs學習筆記(二)--- 事件模塊events

  • 簡介

      http://nodejs.org/api/events.htmljavascript

 

      http://www.infoq.com/cn/articles/tyq-nodejs-eventhtml

 

eventsnode.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 事件的對象設置監聽器,避免遇到錯誤後整個程序崩潰。

相關文章
相關標籤/搜索