# Node.js - events Module & EventEmitter Class
# Node.js - events Module & EventEmitter Class
by jihoon kim
HTML
<h1>Node.js - events Module & EventEmitter Class</h1>
<pre>
EventEmitter는 Node.JS에 내장 옵저버 패턴의 구현
# 참고 : https://www.haruair.com/blog/3396
: https://nodejs.org/dist/v5.5.0/docs/api/events.html
# event_emitter.js
var events = require('events');
var eventEmitter = new events.EventEmitter();
var connectHandler = function connected(){
console.log("Connection Successful");
eventEmitter.emit("data_received");
}
eventEmitter.on('connection', connectHandler);
eventEmitter.on('data_received', function(){
console.log("Data Received");
});
eventEmitter.emit('connection');
console.log("Program has ended");
2. 실행
$ node event_emitter.js
# 다음은 EventEmitter 인스턴스를 단일 리스너와 함께 작성한 예다.
1. eventEmitter.on() 메소드는 리스너를 등록하는데 사용한다.
2. 그리고 eventEmitter.emit() 메소드를 통해 등록한 이벤트를 호출할 수 있다.
# event_emitter2.js
const EventEmitter = require('events');
const util = require('util');
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');
&
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');
# 인자와 this를 리스너에 전달하기
eventEmitter.emit() 메소드는 인자로 받은 값을 리스너 함수로 전달한다.
이 과정에서 기억해야 할 부분이 있는데
일반적으로 EventEmitter를 통해 호출되는 리스너 함수 내에서는
this가 이 리스너 함수를 부착한 EventEmitter를 참조하도록 의도적으로 구현되어 있다.
const myEmitter = new MyEmitter();
myEmitter.on('event', function(a, b) {
console.log(a, b, this);
// Prints:
// a b MyEmitter {
// domain: null,
// _events: { event: [Function] },
// _eventsCount: 1,
// _maxListeners: undefined }
});
...