var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();
ee.on("someEvent", function () {
console.log("event has occured");
});
ee.emit("someEvent");
var Radio = require('./radio.js');
var station = {
freq: '80.16',
name: 'Rock N Roll Radio',
};
var radio = new Radio(station);
radio.on('open', function(station) {
console.log('"%s" FM %s 打開', station.name, station.freq);
console.log('? ??');
});
radio.on('close', function(station) {
console.log('"%s" FM %s 關(guān)閉', station.name, station.freq);
});
事件類型
Events模塊默認(rèn)支持兩個事件。
newListener事件:添加新的回調(diào)函數(shù)時觸發(fā)。
removeListener事件:移除回調(diào)時觸發(fā)。
ee.on("newListener", function (evtName){
console.log("New Listener: " + evtName);
});
ee.on("removeListener", function (evtName){
console.log("Removed Listener: " + evtName);
});
function foo (){}
ee.on("save-user", foo);
ee.removeListener("save-user", foo);
// New Listener: removeListener
// New Listener: save-user
// Removed Listener: save-user
上面代碼會觸發(fā)兩次newListener事件,以及一次removeListener事件。
EventEmitter實(shí)例的方法
once方法
該方法類似于on方法,但是回調(diào)函數(shù)只觸發(fā)一次。
var EventEmitter = require('events').EventEmitter;
var myEmitter = new EventEmitter;
myEmitter.once('message', function(msg){
console.log('message: ' + msg);
});
myEmitter.emit('message', 'this is the first message');
myEmitter.emit('message', 'this is the second message');
myEmitter.emit('message', 'welcome to nodejs');
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
emitter.on('message', console.log);
setInterval(function(){
emitter.emit('message', 'foo bar');
}, 300);
setTimeout(function(){
emitter.removeListener('message', console.log);
}, 1000);
上面代碼每300毫秒觸發(fā)一次message事件,直到1000毫秒后取消監(jiān)聽。
另一個例子是使用removeListener方法模擬once方法。
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
function onlyOnce () {
console.log("You'll never see this again");
emitter.removeListener("firstConnection", onlyOnce);
}
emitter.on("firstConnection", onlyOnce);
(3)removeAllListeners方法
該方法用于移除某個事件的所有回調(diào)函數(shù)。
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter;
// some code here
emitter.removeAllListeners("firstConnection");
更多建議: