[javascript] 프로미스 개념 및 동작 원리

프로미스(Promise)는 비동기 작업을 처리하기 위한 자바스크립트의 기능 중 하나입니다. 프로미스는 비동기 작업이 완료되었을 때 결과값이나 오류를 반환하는데 사용됩니다. 이를 통해 코드의 가독성을 높이고 비동기 작업을 보다 간편하게 처리할 수 있습니다.

프로미스란?

프로미스는 비동기 작업을 나타내는 객체입니다. 비동기 작업이란, 결과가 바로 나오지 않고 시간이 걸리는 작업을 말합니다. 예를 들면, 서버에서 데이터를 요청하거나 파일을 읽어오는 작업이 비동기 작업에 해당합니다.

프로미스는 세 가지 상태를 가지고 있습니다.

프로미스 사용하기

프로미스를 사용하기 위해서는 new Promise()를 사용하여 프로미스 객체를 생성해야 합니다. 프로미스 객체를 생성할 때는 콜백 함수를 전달해야 합니다. 이 콜백 함수는 두 개의 매개변수(resolve, reject)를 가지고 있습니다.

new Promise((resolve, reject) => {
  // 비동기 작업 수행
  // 작업이 완료되면 resolve를 호출하여 이행 상태로 변경
  // 작업 중 오류가 발생하면 reject를 호출하여 거부 상태로 변경
});

프로미스 객체를 생성한 후에는 then() 메소드를 사용하여 이행 상태일 경우에 대한 처리를 할 수 있습니다. then() 메소드는 성공 콜백과 실패 콜백을 인자로 받으며, 이행 상태일 경우 성공 콜백이 호출되고 거부 상태일 경우 실패 콜백이 호출됩니다.

promiseObject.then(
  function(result) {
    // 성공 콜백
  },
  function(error) {
    // 실패 콜백
  }
);

프로미스 체이닝

프로미스는 체이닝을 통해 여러 개의 비동기 작업을 연속적으로 처리할 수 있습니다. then() 메소드를 여러 번 호출하여 비동기 작업을 순차적으로 연결할 수 있습니다. 이전 작업이 완료되면 다음 작업이 순차적으로 실행됩니다.

promiseObject
  .then(function(result1) {
    // 첫 번째 작업 처리
    return result1 + 1;
  })
  .then(function(result2) {
    // 두 번째 작업 처리
    return result2 * 2;
  })
  .then(function(result3) {
    // 세 번째 작업 처리
    console.log(result3);
  })
  .catch(function(error) {
    // 에러 처리
  });

결론

프로미스는 자바스크립트에서 비동기 작업을 간편하게 처리하기 위한 기능입니다. 프로미스 객체를 생성하여 비동기 작업을 수행하고, 이행 상태일 경우에 대한 처리를 then() 메소드를 통해 할 수 있습니다. 이를 통해 코드의 가독성을 높일 수 있고, 여러 비동기 작업을 체이닝해서 처리할 수도 있습니다.

참고: MDN web docs - Promise