- 콜백은 비동기 프로그래밍의 기본적인 방식이지만 개발자 친화적이지는 않다.
- 우리가 작성하는 대부분의 제어 흐름 구조는 순차적인 함수의 실행인데, 이에 익숙하지 않다면 콜백 지옥 문제가 일어날 수 있다.
- 게다가 제대로 구현되었다고 해도 콜백을 통해 순차적으로 실행 흐름을 작성하는 것은 불필요하게 복잡하고 오류가 발생할 가능성도 많다.
5-1 프라미스(Promise)
프라미스는 비동기 결과를 전파하기 위해 사용한 연속 전달 방식(CPS, Continuation-passing style)의 콜백을 대체할 강력한 대안이다.
5-1-1 Promise란 무엇인가?
프라미스는 비동기 작업의 최종적인 결과(또는 에러)를 담고 있는 객체이다.
- 대기중 Pending : 비동기 작업이 아직 완료되지 않았을 때
- 이행됨 Fulfilled : 작업이 성공적으로 끝났을 때
- 거부됨 rejected : 작업이 에러와 함께 종료됐을 때
- 결정됨 Settled : 프로미스가 이행되거나 거부됐을 때
이행 값이나 거부 에러를 받기 위해서 프라미스 인스턴스의 then() 함수를 사용할 수 있다.
promise.then(onFulfilled, onRejected)
- onFulfilled
- 최종적으로 프라미스의 이행값(fulfillment value)을 받는 콜백
- onRejected
둘 다 모두 선택 사항이다.