이벤트를 만들 수도 있음.
EventEmitter() 함수를 통해 이벤트를 emit 할 수 있다!
// events 모듈 임포트
const EventEmitter = require('events');
// EventEmitter 인스턴스 생성
const myEmitter = new EventEmitter();
// 'event' 이벤트에 대한 리스너(콜백 함수) 등록
myEmitter.on('event', () => {
console.log('event 발생!');
});
// 'event' 이벤트 발생시키기
myEmitter.emit('event');
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
// 리스너 함수 정의
function c1() {
console.log('이벤트 c 발생!');
}
function c2() {
console.log('이벤트 c 또 발생!');
}
// 이벤트에 리스너 연결
myEmitter.on('eventC', c1);
myEmitter.on('eventC', c2);
// 이벤트 발생시키기
myEmitter.emit('eventC');
// 특정 이벤트의 특정 리스너 제거
myEmitter.removeListener('eventC', c1); // 이벤트 c에 연결된 c1 리스너 제거
// myEmitter.off('eventC', c2); // Node 10 이상에서 사용 가능. 이벤트 c에 연결된 c2 리스너 제거
// 다시 이벤트 발생시키기
console.log('c1 리스너 제거 후:');
myEmitter.emit('eventC');
// 결과
// 이벤트 c 발생!
// 이벤트 c 또 발생!
// c1 리스너 제거 후:
// 이벤트 c 또 발생!

이벤트는 기본적으로 이벤트를 리스닝하는 리스너와, 이벤트를 발생시키는 emiter로 작동한다.
이벤트를 제거하려면 리스너 함수의 참조를 정확히 명시해야 함. 그래서 익명 함수는 매개변수로 넘기면 제대로 제거하지 못함. 변수에 할당하거나 함수선언식으로 선언 후 콜백으로 넘겨야 함.
