1. 程式人生 > >11.事件驅動events

11.事件驅動events

all log ext ole rem err throw emit rst

事件驅動events ==> events.EventEmitter, EventEmitter 的核心就是事件發射與事件監聽器功能的封裝
更詳細的 API 文檔參見 http://nodejs.org/api/events.html。

var events = require("events");
var emitter = new events.EventEmitter();
emitter.on("someEvent", function(arg1, arg2){
    console.log("listener1", arg1, arg2);
});

emitter.on("someEvent", function(arg1, arg2){
    console.log("listener2", arg1, arg2);
});
emitter.emit("someEvent", "byvoid", 1991);

// 運行的結果是: 
// listener1 byvoid 1991 
// listener2 byvoid 1991
// emitter  為事件  someEvent 註冊了兩個事件監聽器,然後發射了 someEvent事件。運行結果中可以看到兩個事件監聽器回調函數被先後調用

1.EventEmitter.on(event, listener) ==> 為指定事件註冊一個監聽器, 接受一個字符串event和一個回調函數listener
2.EventEmitter.emit(event, [arg1], [arg2], [...]) ==> 發射 event 事件,傳遞若幹可選參數到事件監聽器的參數表。
3.EventEmitter.once(event, listener) ==> 單次監聽器, 只觸發一次
4.EventEmitter.removeListener(event, listener) 移除指定事件的某個監聽器,listener必須是該事件已經註冊過的監聽器。
5.EventEmitter.removeAllListeners([event]) ==> 移除所有事件的所有監聽器,如果指定 event ,則移除指定事件的所有監聽器。
6.error事件 ==> 我們一般要為會發射error事件的對象設置監聽器,避免遇到錯誤後整個程序崩潰。

var  events = require(‘events‘); 
var  emitter =  new  events.EventEmitter(); 
emitter.emit(‘error‘); 
運行時會顯示以下錯誤: 
node.js:201 
throw e; // process.nextTick error, or ‘error‘ event on first tick 

7.繼承EventEmitter
大多數時候我們不會直接使用EventEmitter, 而是在對象中繼承它, 包括fs, net, http在內, 只要是支持事件響應的核心模塊都是EventEmitter的子類

11.事件驅動events