스트림 이벤트 함수 중에 on(’data’, 콜백) 또는 on(’end’, 콜백) 을 사용한다. data라는 이벤트와 end라는 이벤트가 발생할 때 콜백 함수를 호출하도록 이벤트를 등록한 것이다. createReadStream 같은 경우는 내부적으로 알아서 data와 end 이벤트를 호출하지만, 직접 이벤트를 만들 수도 있다.

const EventEmitter = require('events');

const myEvent = new EventEmitter();
myEvent.addListener('event1', (a) => {
  console.log('event1!!', a);
})
myEvent.on('event2', () => {
  console.log('event2');
})
myEvent.on('event2', () => {
  console.log('add event2');
})
myEvent.once('event3', () => {
  console.log('event3');
}) //한 번만 실행됨

myEvent.emit('event1', 'aa');
myEvent.emit('event1');
myEvent.emit('event2'); //add event2까지 2개가 실행됨
myEvent.emit('event2'); //add event2까지 2개가 실행됨
myEvent.emit('event3');
myEvent.emit('event3'); //once라 위에 한번 실행 후 실행안됨

myEvent.on('event4', () => {
  console.log('event4');
})
myEvent.removeAllListeners('event4');
myEvent.emit('event4'); //실행안됨

const listener = () => {
  console.log('event5??');
}
myEvent.on('event5', listener);
myEvent.emit('event5');
myEvent.removeListener('event5', listener);
myEvent.emit('event5'); //실행 안됨

console.log(myEvent.listenerCount('event2'));  //event2 개수
module.exports = myEvent;

Untitled

events 모듈을 이용해 객체를 만들어본 소스이다. 객체는 이벤트 관리를 위한 메서드를 가지고 있다.

스트림에서 emit으로 data와 end를 보낸다는 걸 알 수 있게됐다. 그래서 스트림을 이용한 소스상에 on(’data’, callback), on(’end’, callback) 소스를 작성하면 해당 이벤트 작동하는 것...