JavaScript 프로미스

2022. 4. 11. 11:40프로그래밍

반응형

모던 자바스크립트(저자 이웅모) 내용을 참고하였습니다.

 

💡️ Promise

  • 비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용할 수 있지만, 여러 단점들이 있다
    • 콜백지옥으로 인해 가독성이 나쁘다 (콜백지옥 : 콜백 함수 호출이 중첩되어 복잡도가 높아지는 현상)
    • 비동기 처리 중 발생한 에러의 처리가 곤란하다
    • 여러 개의 비동기 처리를 한번에 처리하는 데 한계가 있다
  • ES6에서는 비동기 처리를 위한 또 다른 패턴으로 프로미스(Promise)를 도입했다
  • Promise는 비동기 처리 상태와 처리 결과를 갖는다

 

⚡️ Promise 생성

  • Promise 생성자 함수를 new 연산자와 함께 호출하면 Promise 객체를 생성한다
  • 비동기 처리를 수행할 콜백 함수를 인수로 전달받는데, 이 콜백 함수는 resolve와 reject함수를 인수로 전달받는다
  • 콜백 함수 내부에서 비동기 처리가 성공하면 resolue 함수를 호출하고, 실패하면 reject함수를 호출한다
// 프로미스 생성
const promise = new Promise((resolve, reject) => {
    // Promise 함수의 콜백 함수 내부에서 비동기 처리를 수행한다
    if(/* 비동기 처리 성공 */){
        resolve('result');
    }else{
        reject('failure reson');
    }
});

 

Promise의 상태 정보

pending

  • 비동기 처리가 아직 수행되지 않은 상태

fulfilled

  • 비동기 처리가 수행된 상태(성공)
  • resolve 함수 호출

rejected

  • 비동기 처리가 수행된 상태(실패)
  • reject 함수 호출

 

⚡️Promise 후속 처리 메서드(then, catch, finally)

  • Promise의 비동기 처리 상태가 변화하면 후속 처리 메서드에 인수로 전달한 콜백 함수가 선택적으로 호출된다
  • 이때 후속 처리 메서드의 콜백 함수에 Promise의 처리 결과가 인수로 전달된다
  • 모든 후속 처리 메서드는 Promise를 반환하며, 비동기로 동작한다

 

then()

  • 두 개의 콜백 함수를 인수로 전달받는다
    • 첫번째 콜백 함수: 프로미스가 fulfilled 상태가 되면 호출
    • 두번째 콜백 함수: 프로미스가 reject 상태가 되면 호출
// fulfilled
new Promise(resolve => resolve('fulfilled'))
    .then(v => console.log(v), e => console.log(e)); // fulfilled

// rejected
new Promise(reject => reject(new Error('rejected')))
    .then(v => console.log(v), e => console.log(e)); // Error: rejected

 

catch()

  • 한 개의 콜백 함수를 인수로 전달받는다
  • Promise가 rejected 상태인 경우에만 호출된다
// rejected
new Promise((_, reject) => reject(new Error('rejected')))
    .catch(e => console.log(e)); // Error: rejected

 

finally()

  • 한 개의 콜백 함수를 인수로 전달받는다
  • 프로미스의 성공 또는 실패와 상관없이 무조건 한 번 호출된다
  • 프로미스의 상태와 상관없이 공통적으로 수행해야 할 처리 내용이 있을 때 유용하다
new Promise(() => {})
    .finally(() => console.log('finally')); // finally

 

반응형

'프로그래밍' 카테고리의 다른 글

JavaScript 실행 컨텍스트  (0) 2022.04.11
JavaScript var, const, let 키워드  (0) 2022.04.11
JavaScript 비동기 프로그래밍  (0) 2022.04.11
JavaScript 특징과 실행 환경  (0) 2022.04.11
API 버전 관리  (0) 2022.02.07