Emitter (이벤트)
const EventEmitter = require('events'); const emitter = new EventEmitter(); const callback1 = (args)=> { console.log('first callback -', args); }; emitter.on('dylan',callback1); // 이벤트 생성 > 'dylan' 발생시, 콜백함수 호출 emitter.on('dylan',(args)=>{ console.log('second callback - ', args); }); // 이벤트 생성 > 'dylan' 발생시, 콜백함수 호출 emitter.emit('dylan',{message:1}); // 이벤트 발생, 전달하고 싶은 데이터 emitter.emit('dylan',{message:2}); emitter.removeListener('dylan',callback1); // 이벤트 제거 // emitter.removeAllListeners(); // 모든 이벤트 제거 emitter.emit('dylan',{message:3});
Emitter로 로그 출력 구현
/* main.js */
const logger = require('./logger.js'); const emitter = new logger.Logger(); emitter.on('log',(event)=>{ console.log(event); }); emitter.log(()=>{ console.log('...doing something'); });
/* logger.js */
const EventEmitter = require('events'); class Logger extends EventEmitter { log(callback){ this.emit('log','started...'); callback(); this.emit('log','ended!'); } } module.exports.Logger = Logger;
포인트 : 이벤트 emitter는 한번 객체를 만들면 그 객체 내에서 발생하는 이벤트에 한해서 이벤트를 들을 수 있다. 여러가지 이벤트 emitter 객체를 만들면 다른 객체에서 발생하는 이벤트는 다른 emitter에서 들을 수 없다.