Today Yewon Learned

[Node.js] 비동기 프로그래밍과 이벤트 본문

javascript/Node.js

[Node.js] 비동기 프로그래밍과 이벤트

데브워니 2021. 11. 17. 08:00

Node.js의 이벤트

- 어떤 일이 발생했음을 알리는 신호

const EventEmitter = require('events'); // 'events'라는 코어 모듈 가져오기

const myEmitter = new EventEmitter(); // 'myEmitter' 객체 생성

myEmitter.on('test', () => { // 'myEmitter'객체가 두 메소드 호출 (on, emit)
  console.log('Success!');
});

myEmitter.emit('test');

- 'events' 코어 모듈 : 클래스 하나를 외부에 공개 (EventEmitter 클래스 외부에 공개)

- EventEmitter : '이벤트 발송기', '이벤트 전파기' 로 해석되며, 이벤트를 사용하기 위해 필요

* EventEmitter 객체를 사용할 때는 이벤트를 발생시키기 전 콜백 설정을 먼저 해야함

* 하나의 이벤트에 대해 여러개의 콜백 설정 가능

- .on 메소드 : 이벤트 핸들러를 설정하는 메소드 , 어떤 이벤트가 발생했을 때 실행할 콜백을 등록하는 콜백 등록 (test라는 이벤트가 발생하면 Success!가 출력되는 콜백 등록)

- .addListener. 메소드 : on메소드와 동일

- .once 메소드 : on 메소드와 기능은 동일하지만, 해당 이벤트에 대해서 딱 한번만 반응해서 실행됨

- .emit 메소드 : 이벤트를 발생시키는 메소드

 

오류 발생 코드

const EventEmitter = require('events'); // 'events'라는 코어 모듈 가져오기

const myEmitter = new EventEmitter(); // 'myEmitter' 객체 생성

myEmitter.emit('test');

myEmitter.on('test', () => { // 'myEmitter'객체가 두 메소드 호출 (on, emit)
  console.log('Success!');
});

'test'라는 이벤트를 발생시키고나서, 'on'메소드로 'test'이벤트에 대한 콜백 실행,

하지만 'test'이벤트가 먼저 발생되어 'on'메소드 콜백 실행안됨

즉, 이벤트를 발생시키기 전에 콜백설정을 먼저 해야함

 

 

하나의 이벤트에 여러개 콜백 설정 가능

예시)

const EventEmitter = require('events');

const myEmitter = new EventEmitter();

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

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

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

myEmitter.emit('test');

결과)

1

2

3

 

이벤트설정과 콜백설정은 하나의 이벤트 객체 안에서만 반응

예시)

const EventEmitter = require('events');

const myEmitter = new EventEmitter();
const myEmitter2 = new EventEmitter();

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

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

myEmitter2.on('test', () => {
	console.log('3');
});

myEmitter.emit('test');

결과)

1

2

Comments