Node.js實戰9:用EventEmitter觸發和響應事件

Nodejs有一個重要的事件模塊:EventEmitter。

它在Nodejs的內置及第三方模塊中被大量使用,許多Nodejs項目的架構都是用它實現的。

可見,EventEmitter對於學習NodeJS非常重要。

下面,我們通過常式來理解和掌握EventEmitter。

var EventEmitter = require('events').EventEmitter; 
var event = new EventEmitter();

//觸發some_event事件
setTimeout(function() {
event.emit('some_event');
}, 1000);

//響應some_event事件
event.on('some_event', function() {
console.log('some_event 事件觸發');
});

這段代碼,先初始化一個EventEmitter的實例,然後一秒後,觸發一個事件,事件名稱是some_event,並且在這個事件的響應函數中輸出信息。

執行效果如圖所示:

EventEmitter 的每個事件由一個事件名和若干個參數組成,事件名是一個字元串,通常表達一定的語義。對於每個事件,EventEmitter 支持 若干個事件監聽器。

當事件觸發時,註冊到這個事件的事件監聽器被依次調用,事件參數作為回調函數參數傳遞,如下例:

執行效果:

以上例子中,emitter 為事件 someEvent 註冊了兩個事件監聽器,然後觸發了 someEvent 事件。

運行結果中可以看到兩個事件監聽器回調函數被先後調用。 這就是EventEmitter最簡單的用法。

如果你之前接觸過NodeJS,是不是會有熟悉的感覺?比如Express中,常見的connection方法。就是用這種方式構建的。

更多本系列文章:

Node.js實戰8:可用於壓縮、加密的zlib

Node.js實戰7:你了解buffer嗎?

Node.js實戰6:定時器,使用timer延遲執行