NodeJS의 이벤트

younoah·2022년 1월 12일
0

[nodeJS]

목록 보기
4/15

NodeJS의 이벤트

커스텀 이벤트

커스텀 이벤트를 정의하고 이벤트를 발생시키는 방법에 대해 알아보자.

const EventEmitter = require('events');
const emitter = new EventEmitter();

const callback = () => {
  console.log('first callback - ', args);
}

// on - 이벤트 정의
// hi라는 이벤트 발생시 콜백함수 정의
emitter.on('hi', callback);

// 중복정의 가능, 뒤이어서 동작
emitter.on('hi', (args) => {
  console.log('second callback - ', args);
});

// emit - 이벤트 발생
// hi 이벤트 발생
emitter.emit('hi', { message: 1 });
emitter.emit('hi', { message: 2 });

// emitter에 존재하는 모든 리스너, 즉 모든 이벤트의 콜백을 제거
emitter.removeAllListeners();

// emitter에 hi 이벤트의 callback라는 콜백을 제거
emitter.removeListener('hi', callback);

emitter.emit('hi', { message: 3 });

커스텀 이벤트 활용

이번에는 EventEmitter 활용예제를 보도록하자.

로거라는 EventEmitter를 클래스를 생성해보자. 해당 로거 Emitter의 역할은 콜백의 실행전과 후에 로그를 찍어주는 역할을 한다.

const EventEmitter = require('events');

class Logger extends EventEmitter {
  log(callback) {
    this.emit('log', 'started...');
    callback();
    this.emit('log', 'ended!');
  }
}

module.exports.Logger = Logger;
const logger = require('./logger.js');
const emitter = new logger.Logger();

emitter.on('log', (event) => {
  console.log(event);
});

emitter.log(() => {
  console.log('-----loop-----');
  for (let i = 0; i < 5; i++) {
    console.log('count', i);
  }
});

주의해야할 점은 EventEmitter은 한번 객체를 생성하면 해당 객체에서 발생된 이벤트에 대해서만 리스닝을 할 수 있다.

즉, 서로다른 EventEmitter의 객체는 개별적인것이다.

따라서 클래스로 작성하여 하나의 객체로 관리 해주어야 올바르게 활용할 수 있다.

profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글