EventEmitter

Node.js 로 이벤트를 건내고 처리하는 객체

이벤트 등록

const eventListener = new EventEmitter();
eventListener.on("이벤트명", (보낸값) => {
	// 콜백처리
});
 

이벤트 발생

const eventListener = new EventEmitter();
eventListener.emit("이벤트명", 보넬 값);

당연하지만 등록 & 발생 시 사용하는 EventEmitter 객체는 같은 걸 사용해야함

EventEmitter 활용

import { EventEmitter } from "events";
import mysql = require("mysql");
 
// 이벤트 리스너 사용
const eventListener = new EventEmitter();
let connection: mysql.Connection | undefined;
 
function CreateDBConnection(DBConfig: mysql.ConnectionConfig) {
    const dbconect = mysql.createConnection(DBConfig);
    dbconect.connect((err) => {
        if (err) {
            eventListener.emit("error", err);
        } else {
            connection = dbconect;
            eventListener.emit("connected", dbconect);
        }
    });
}
 
eventListener.on("connected", (dbconect: mysql.Connection) => {
	console.log("DB 연결 완료");
});
 
// Promise 와 결합하여 사용할때
function getDBConnection(): Promise<mysql.Connection> {
    return new Promise((resolve, reject) => {
        if (connection) {
            resolve(connection);
        } else {
            eventListener.on("connected", (dbconect: mysql.Connection) => {
                resolve(dbconect);
            });
        }
    });
}

Callback 또는 Promise로 반환되는 비동기 작업에 결과로 나온 변수를 전역적으로 사용하려고 할 때 사용하기 좋은 방법
예를들어 어떤 비동기 작업이 해당 작업을 호출하지 않은 곳에서도 해당 작업이 완료됬는지 확인 할때 쓰기 좋음