프라미스
-
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 호출 가능하지만 콜백은 하나만 가능