Node.js

Node.js ) 프라미스 / 어싱크 / 어웨이트

Hweb 2024. 9. 25. 15:48

1. Promise (프라미스)

프라미스는 비동기 작업의 성공 또는 실패 결과를 나타내는 객체입니다. 작업이 완료되면(성공 또는 실패) 그 결과를 나중에 사용할 수 있습니다. 프라미스는 세 가지 상태를 가집니다:

  • Pending: 대기 중인 상태 (작업이 완료되지 않음).
  • Fulfilled: 작업이 성공적으로 완료된 상태.
  • Rejected: 작업이 실패한 상태.

Promise의 기본 사용법:

let promise = new Promise((resolve, reject) => { 
    let success = true; 
    if (success) { 
        resolve("작업 성공"); 
    } else { 
        reject("작업 실패"); 
    } 
}); 
promise 
    .then(result => { 
    	console.log(result); // 작업 성공 
    }) 
    .catch(error => { 
    	console.log(error); // 작업 실패 
    });
 
  • then(): 프라미스가 성공적으로 완료되었을 때 실행될 코드를 정의.
  • catch(): 프라미스가 실패했을 때 실행될 코드를 정의.

2. Async (어싱크)

async 키워드는 함수 앞에 붙여 비동기 함수를 정의합니다. async 함수는 자동으로 프라미스를 반환하며, 명시적으로 프라미스를 반환하지 않더라도 암묵적으로 프라미스로 래핑됩니다.

Async 함수 예시:

async function fetchData() {
  return "데이터 가져오기 성공!";
}

fetchData().then(result => console.log(result));  // 데이터 가져오기 성공!

3. Await (어웨이트)

await 키워드는 async 함수 내에서만 사용할 수 있으며, 프라미스가 해결될 때까지 함수의 실행을 잠시 멈추게 만듭니다. 이때 await는 프라미스가 해결된 값을 반환하고, 프라미스가 거부되면 에러를 던집니다.

Async/await 사용 예시:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve("데이터 가져오기 성공!"), 2000);
  });
}

async function getData() {
  try {
    let result = await fetchData();  // fetchData가 완료될 때까지 기다림
    console.log(result);  // 데이터 가져오기 성공!
  } catch (error) {
    console.log(error);  // 에러 처리
  }
}

getData();

Promise vs Async/Await 차이점

  • Promise: .then()과 .catch()로 비동기 작업 완료 시 코드를 실행합니다.
  • Async/Await: await를 사용해 더 직관적이고 동기처럼 보이게 비동기 코드를 작성할 수 있습니다. 코드 가독성이 좋아집니다.

정리

  • Promise: 비동기 작업의 성공/실패 상태를 나타내는 객체.
  • async: 비동기 함수를 정의하는 키워드.
  • await: 프라미스가 해결될 때까지 기다리게 만드는 키워드, 주로 async 함수 내에서 사용.
반응형