평행코드

Async Await의 등장 (Callback function 콜백함수, Promise) 본문

Node js

Async Await의 등장 (Callback function 콜백함수, Promise)

나의 오류는 누군가 겪었던 오류 2023. 5. 31. 22:01

자바스크립트의 단점은 기다리는 기능이 없어서 아무리 위에서 아래로 읽어도

데이터베이스에서 불러오는 시간이 있어 순서가 뒤죽박죽 될 수 있습니다.

자바스크립트는 동기적이고 한 번에 하나의 일만 처리할 수 있습니다.

그래서 데이터를 다 불러오면 그때서야 다음에 있는 코드를 실행할 수 있는 콜백함수를 사용하였습니다.

 

콜백함수 (함수안에 함수)

 

콜백함수의 장점은 에러들을 바로 볼 수 있어서 에러관리가 쉽다는 것이있지만,

콜백지옥이라는 말이 있을 정도로 if, else로 반복이되어 코드가 지저분해지고,

유지보수가 힘들다는 단점이 있습니다.

 

그래서 등장한 것이 Promise입니다.

 

Promise의 등장

 

Promise는 기본적으로 하는 일이 콜백함수와 같지만,

콜백처럼 특정 작업이 끝난 후 함수 실행이 아닌

Video.find().then()이라는 자체 메소드로 코드를 더 쉽고 간결하게 쓸 수 있다는 장점이 있습니다.

 

그 이후 await, async가 생기면서 또 한번 달라졌습니다! ( node.js 7.6 버전부터 )

 

await는 데이터베이스에게 결과값을 받을 때 까지 자바스크립트가 기다리게 해줄 수 있습니다.

await, async의 장점은 매우 직관적이라는것 즉 자바스크립트가 어디서 어떻게 기다리는지 알 수 있습니다.

promise보다 더 쉬운 비동기적인 상황을 코드로 한눈에 볼 수 있습니다.

 

하지만 콜백함수와 달리 promise방식은 에러가 어디서 오는지 명확하지가 않아서 try catch를 사용합니다.

말그대로 try안에 있는 코드를 실행하고 오류가 생기면 catch 안에 코드가 실행되는 구조입니다.

export const home = async (req, res) => {
    try{
    const videos = await Video.find({})
    return res.render("home", { pageTitle: "Home", videos });
    } catch {
        return res.render("server-error");
    }
    
};

위에 코드에서 보듯이 function 앞에 async를 써주고,

그 함수안에 await를 써주면 됩니다.