1 minute read

  • promise 는 ‘제작 코드’ 와 ‘소비 코드’ 연결해 주는 특별한 JS 객체

  • promise 는 new Promise(function(resolve, reject) { // excutor}) 로 만들어짐

  • excutor 는 new Promise 가 만들어질 때 자동으로 실행되어 결과 최종적으로 만들어내는 제작 코드 포함

  • resolve, reject 는 JS 가 자체적으로 제공하는 콜백

  • excutor 에 인수로 콜백 넘길 시 하나는 반드시 호출 해야함

  • resolve(value) 는 일이 성공적으로 끝난 경우 그 결과를 나타내는 value 와 함께 호출됨

  • reject(error) 는 에러 발생 시 에러 객체를 나타내는 error와 함께 호출

  • new Promise 생성자가 반환하는 promise 객체는 내부 상태를 나타내는 state, 결과를 나타내는 result 프로퍼티를 가지며 직접 접근할 수 없음

  • state 는 처음엔 “pending” 이였다가 resolve/reject 호출 시 “fullfilled”/”rejected” 로 변함

  • result 는 처음엔 “undefined” 이였다가 resolve/reject 호출 시 excutor 내부의 resolve/reject 의 인수 값으로 변함

  • 프라미스는 성공/실패하며 이때 한번 변경되면 다시 변경할 수 없음

  • reject 는 Error 객체와 함께 사용하는 것을 추천

  • resolve/reject 함수는 즉시 호출 가능

  • then, catch, finally 는 promise 객체에 접근하여 구독하고 상황에 맞는 처리하는 핸들러

  • then 의 첫번째/두번째 인수는 프라미스가 이행/거부됐을 때 (resolve/reject) 됐을 때 해당 값 인수로 받아서 실행 결과 받음

  • catch 는 에러가 발생한 경우만 다룰 때 사용하며 then(null, f)과 같음

  • finally 는 프러미스 처리(이행/거부)되면 항상 실행되며 .then(f,f) 와 유사

  • finally 핸들러엔 인수 없으며 프라미스 이행/거부 여부 알 수 없음 (절차를 마무리하는 ‘보편적’ 작업 수행)

  • finally 핸들러는 자동으로 다음 핸들러에 결과와 에러 전달(결과를 처리하기 위해 만들어진 용도 아님)

  • 처리된 프라미스의 핸들러는 즉각 실행됨

  • 프라미스는 흐름이 자연스러우며 결과에 따라 그 다음에 무엇을 할 지에 대한 코드 작성해야 하지만 콜백은 함께 호출할 함수가 준비되어 있어야 함

  • 프라미스는 원하는 만큼 .then 호출 가능하지만 콜백은 하나만 가능