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
'💠프로그래밍 언어 > JavaScript' 카테고리의 다른 글
[심화] 비동기 함수의 반복문은 어떻게 사용할까? (0) | 2024.08.05 |
---|---|
[심화] 비동기 함수 Promise, async/await 파헤치기 (0) | 2024.07.29 |
[심화] 불변성 / 참조 투명성에 대해 알아보자 (0) | 2024.07.24 |
[심화] JSON.stringify / JSON.parse에 대해 알아보자 (0) | 2024.07.17 |
[심화] 전역변수도 매개변수로 하는 이유는 무엇일까? (0) | 2024.07.15 |