Node.JS EventEmitter
Example 1
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('start', (message) => console.log(message));
emitter.emit('start', 'started');
// emitter.removeAllListeners();
Example 2
const EventEmitter = require('events');
class Timer extends EventEmitter {
constructor(total) {
super();
this.total = total;
this.ticks = 0;
}
start() {
this.interval = setInterval(() => this.tick(), 1000);
this.emit('start');
}
tick() {
this.ticks += 1;
if (this.ticks <= this.total) {
this.emit('tick', this.ticks);
} else {
this.end();
}
}
end() {
clearInterval(this.interval);
this.emit('end');
}
}
const timer = new Timer(10);
timer.once('start', () => console.log('Start'));
timer.on('tick', (tick) => console.log(tick));
timer.once('end', () => console.log('End'));
timer.start();
res:
Start
1
2
3
4
5
6
7
8
9
10
End
Example 3
EventEmitter.js
class EventEmitter {
constructor() {
this.events = {};
}
on(type, listener) {
this.events[type] = this.events[type] || [];
this.events[type].push(listener);
}
emit(type, arg) {
if (this.events[type]) {
this.events[type].forEach((listener) => listener(arg));
}
}
}
module.exports = EventEmitter;
app.js
const EventEmitter = require('./EventEmitter');
class Timer extends EventEmitter {
constructor(total) {
super();
this.total = total;
this.ticks = 0;
}
start() {
this.interval = setInterval(() => this.tick(), 1000);
this.emit('start');
}
tick() {
this.ticks += 1;
if (this.ticks <= this.total) {
this.emit('tick', this.ticks);
} else {
this.end();
}
}
end() {
clearInterval(this.interval);
this.emit('end');
}
}
const timer = new Timer(10);
timer.on('start', () => console.log('Start'));
timer.on('tick', (tick) => console.log(tick));
timer.on('end', () => console.log('End'));
timer.start();
res:
Start
1
2
3
4
5
6
7
8
9
10
End