[심화] 이벤트를 발생시키는 EventEmitter

728x90

EventEmitter

EventEmitter

⸰ event 를 발생시키는 모든 객체는 EventEmitter 클래스의 객체

하나의 EventEmitter 객체가 발생시키는 이벤트는, 해당 객체 내에서만 유효 

> 하나의 EventEmitter 객체에 설정된 콜백 함수가 다른 EventEmitter 객체의 이벤트에 반응하지 않음

 

on( )

  - 이벤트가 발생했을 때, 실행할 콜백 함수를 등록하는 함수

  - 이벤트 핸들러를 설정하는 함수

  - addLinster 함수의 역할과 인자가 동일

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

myEmitter.on('test', () => {
  console.log('Success1');
});
myEmitter.on('test', () => {
  console.log('Success2');
});

test 라는 이벤트가 발생하면, 'Success1'과 'Success2'가 출력

> 하나의 이벤트에 대해 여러 가지 콜백 함수 적용 가능

 

emit( )

  - 인위적으로 이벤트를 발생시키는 함수

  - 직접 EventEmitter 객체를 만든 경우 사용

  - 콜백 함수가 등록된 이벤트가 발생했을 때, 시스템이  콜백 함수를 실행시켜 줌

myEmitter.emit('test');

 

once( )

  - 이벤트에 대한 콜백 함수(이벤트 핸들러)를 등록하지만, 한 번 반응하여 실행하는 함수

myEmitter.once('test', () => {
  console.log('Success');
});

myEmitter.emit('test');
myEmitter.emit('test');
myEmitter.emit('test');

test 라는 이벤트를 3번 발생시켰지만, 한 번의 'Success'가 출력

 

listeners( ) 

  - 특정 이벤트에 대한 콜백 함수(이벤트 핸들러)들의 배열을 출력하는 함수

myEmitter.once('test', () => {
  console.log('A');
});

myEmitter.once('test', () => {
  console.log('B');
});

myEmitter.once('test', () => {
  console.log('C');
});

console.log(myEmitter.listeners('test'));
// [ [Function], [Function], [Function] ]

 

off( )

  - 콜백 함수(이벤트 핸들러)를 해제하는 함수

  - 모양이 같은 콜백 함수라도, 참조값이 다르면 다른 함수

 

  : 변수에 할당

const callback = () => {
  console.log('Success');
};
myEmitter.on('test', callback);

myEmitter.off('test', callback);

myEmitter.emit('test');
// 아무것도 출력되지 않는다.

 

: 배열로 관리

const cbArr = [];

cbArr[0] = () => {
  console.log('A');
};
cbArr[1] = () => {
  console.log('B');
};

myEmitter.on('test', cbArr[0]);
myEmitter.on('test', cbArr[1]);

myEmitter.off('test', cbArr[0]);
myEmitter.off('test', cbArr[1]);

myEmitter.emit('test');

 

 

 

 

728x90