이벤트

ClassBinu·2024년 4월 4일

Node.js 교과서

목록 보기
6/19

이벤트

이벤트를 만들 수도 있음.
EventEmitter() 함수를 통해 이벤트를 emit 할 수 있다!

// events 모듈 임포트
const EventEmitter = require('events');

// EventEmitter 인스턴스 생성
const myEmitter = new EventEmitter();

// 'event' 이벤트에 대한 리스너(콜백 함수) 등록
myEmitter.on('event', () => {
  console.log('event 발생!');
});

// 'event' 이벤트 발생시키기
myEmitter.emit('event');

이벤트 메서드

  • on(이벤트명, 콜백): 이벤트 등록
  • addListener(이벤트명, 콜백): on이랑 완전히 동일. 초창기 메서드.
  • emit(이벤트명): 이벤트 호출
  • once(이벤트명, 콜백): 한번만 실행되는 이벤트
  • removeAllListeners(이벤트명): 이벤트에 연결된 모든 리스너 제거
  • removeListener(이벤트명, 리스너): 이벤트에 연결된 리스너를 하나씩 제거
  • off(이벤트, 리스너): removeListener와 동일. 노드 10에서 추가.
  • listenerCount(이벤트명): 해당 이벤트에 리스너가 몇 개 연결되었는지 확인
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로 작동한다.

이벤트를 제거하려면 리스너 함수의 참조를 정확히 명시해야 함. 그래서 익명 함수는 매개변수로 넘기면 제대로 제거하지 못함. 변수에 할당하거나 함수선언식으로 선언 후 콜백으로 넘겨야 함.

0개의 댓글