230829 개발일지 TIL - JavaScript의 비동기 처리: Promise vs Async/Await

The Web On Everything·2023년 8월 29일
0

개발일지

목록 보기
110/269

Promise란?

Promise는 JavaScript에서 비동기 작업을 다루는 객체이다. 이는 "나중에 결과를 주겠다"라는 약속과 같다. Promise가 성공적으로 완료되면 결과를 제공하며, 실패하면 그 원인을 알려준다.

let homework = new Promise((resolve, reject) => {
    // 여기서 숙제를 함
    if (/* 숙제 성공 */) {
        resolve("숙제 답");
    } else {
        reject("너무 어려워서 못 했어요");
    }
});

homework.then(answer => console.log(answer)).catch(reason => console.error(reason));

위 코드에서 homework라는 Promise 객체가 있는데 이 객체가 resolve 함수를 호출하면, .then() 메서드가 실행된다. 반대로 reject 함수를 호출하면 .catch() 메서드가 실행된다.

Async/Await란?

async function waitForResult() {
    try {
        let answer = await homework; // 시험 답안이 준비될 때까지 기다림
        console.log(answer);
    } catch (reason) {
        console.error(reason); // 왜 시험 답안이 안 나왔는지 설명함
    }
}

waitForResult();

await 키워드는 우리가 결과를 기다리도록 지시한다. 그리고 이 '결과'란 바로 앞선 예시에서 본 것처럼 'Promise'이다.

즉, await homework; 라고 하면 JavaScript에게 "여기서 잠깐 멈춰! homework Promise가 결과를 줄 때까지 기다려!"라고 말하는 것과 같다. 그리고 이 모든 것은 async 함수 내에서만 가능하다.

Promise와 Async/Await의 차이

두 방법 모두 JavaScript에서 비동기 처리를 하기 위한 도구이다. 하지만, Async/Await은 Promise를 기반으로 한 보다 간결한 문법을 제공한다.

Promise는 '비동기 작업이 완료될 것을 약속'하는 객체이다. 이행(fulfilled) 상태가 되면 결과를 반환하고, 거부(rejected) 상태가 되면 오류를 반환한다.

반면에, Async/Await는 비동기 코드를 마치 동기 코드처럼 작성할 수 있게 해준다. 이로 인해 코드의 가독성과 유지 관리가 훨씬 쉬워진다.

결론

JavaScript에서 비동기 처리는 매우 중요한 부분인데 Promise와 Async/Await 모두 자신만의 장점을 가지고 있으며, 필요에 따라 적절히 활용할 수 있다.

Async/Await 문법은 Promise 기반으로 구현되어 있으며, 코드의 가독성을 크게 향상시키므로 복잡한 로직에서 특히 유용하다. 그러나 때로는 단순한 비동기 작업에 대해서는 Promise만 사용하는 것이 더 간단하고 직관적일 수도 있다.

따라서 어떤 도구를 사용할지 결정하기 위해서는 개별 프로젝트의 요구 사항과 개인적인 선호도 등 여러 요소들을 고려해야 한다.

profile
오늘은 무슨 오류를 만날까?! 널 만나러 가는 길~ LOL

0개의 댓글