Promise에 대해

oversleep·2025년 1월 25일
post-thumbnail

Promise는 자바스크립트에서 비동기적인 작업을 처리하기 위한 객체임.

주로 서버에서 데이터를 가져오거나 파일을 읽는 등 시간이 걸리는 작업을 처리할 때 사용함.

Promise는 세 가지 상태가 있음.

  1. 대기(pending):

    작업이 아직 수행되지 않은 상태

  2. 이행(fulfilled):

    작업이 성공적으로 완료된 상태

  3. 거부(rejected):

    작업이 실패한 상태

Promise를 생성할 때는 콜백 함수를 전달하여 처리할 비동기 작업을 정의함.

이 콜백 함수는 resolvereject라는 두 개의 인수를 받음.

resolve는 작업을 성공적으로 완료했을 때 호출되며, 결과 값을 전달함.

reject는 작업을 실패했을 때 호출되며, 에러를 전달함.

Promise를 사용하면 비동기적인 작업의 결과를 처리하기 위해 then() 및 catch() 메서드를 통해 작업을 연결하여 처리함.

then() 메서드는 작업이 성공적으로 완료되었을 때 실행되며,

catch() 메서드는 작업이 실패했을 때 실행됩니다.

파일을 읽는 작업을 Promise로 처리한 예:

const readFilePromise = new Promise((resolve, reject) => {
  fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) {
      reject(err); // 작업 실패 시 reject 호출
    } else {
      resolve(data); // 작업 성공 시 resolve 호출
    }
  });
});

readFilePromise.then((data) => {
  console.log(data); // 파일 읽기 성공 시 데이터 출력
}).catch((err) => {
  console.error(err); // 파일 읽기 실패 시 에러 출력
});

위 예는 readFilePromise라는 Promise 객체를 생성하여 파일을 읽는 작업을 수행함.
이후 then() 및 catch() 메서드를 사용하여 성공 및 실패 시의 동작을 정의함.

Promise.all()에 대해

Promise.all()여러 개의 Promise를 받아들이고,

모든 Promise가 이행될 때까지 기다린 다음 모든 Promise가 이행된 결과를 반환하는 메서드

이 메서드는 배열로 Promise를 전달 받고, 각 Promise가 이행되면 그 결과를 배열에 모아 반환함.

만약 하나의 Promise라도 거부(rejected)되면 Promise.all()은 그 즉시 거부됨.

모든 Promise가 성공적으로 이행되어야만 결과를 반환함.

예를 들어, 서로 다른 두 개의 API에서 데이터를 가져와야 하는 경우 Promise.all()을 사용할 수 있음.

두 개의 API 결과 처리 예

const promise1 = fetchDataFromAPI1();
const promise2 = fetchDataFromAPI2();

Promise.all([promise1, promise2])
  .then(results => {
    // 두 개의 Promise가 모두 이행될 때 실행됨
    const dataFromAPI1 = results[0];
    const dataFromAPI2 = results[1];
    // 데이터를 처리하는 로직
  })
  .catch(error => {
    // 하나 이상의 Promise가 거부될 때 실행됨
    console.error("An error occurred:", error);
  });

위 예시에서 Promise.all()promise1promise2를 배열로 받아들여서 두 개의 Promise가 모두 이행될 때까지 기다린 다음, 모든 데이터를 배열에 담아 반환한다.

이후 .then() 메서드를 사용하여 모든 데이터를 처리할 수 있다.

요약:

  1. Promise는 비동기 작업의 성공 또는 실패를 나타내는 객체로, 대기, 이행, 거부 세 가지 상태가 있음.
  2. Promise.all()은 여러 개의 Promise를 받아들여 모든 Promise가 이행될 때까지 기다린 다음, 모든 Promise의 결과를 배열로 반환함.
  3. Promise.all()은 모든 Promise가 성공적으로 이행되어야만 결과를 반환하며, 하나의 Promise라도 거부되면 즉시 거부됨.
profile
궁금한 것, 했던 것, 시행착오 그리고 기억하고 싶은 것들을 기록합니다.

0개의 댓글