더북(TheBook)

6.4 상태와 숙명

 

Promise를 다룰 땐 말이야, 진짜든 Deferred 쓴 가짜든 Promise의 귀결과 이룸 사이의 미묘한 차이를 이해해야 해.” 샬럿의 설명이 이어진다.

“이룸 Promise를 생성하는 함수를 Promise.fulfill이 아니라 Promise.resolve라고 부른단 말이지. Promise는 꼭 어떤 값으로 이루어서 귀결시켜야 한단 법이 없기 때문이야. 다른 Promise로도 얼마든지 귀결시킬 수 있어. 이미 버려진 Promise나 나중에 버려질 Promise라도 상관없어. ‘귀결되었다’는 말은 프라미스 숙명이 어느 한쪽으로 결정됐단 뜻이거든. 하나의 값으로 못 박히든지, 아니면 다른 프라미스의 궁극적인 숙명이 되는 게지.”

“깃허브를 뒤져보니 ‘상태와 운명’이라는 제목으로 정리가 잘 되어있는 사이트가 있더라.” (https://goo.gl/G1Op85 참고).

“기본적으로 Promise는 언제나 세 가지 상태(state), 즉 이룸(fulfilled), 버림(rejected), 보류(pending) 중 하나야. 기술적으로 깊게 들어가면 더욱 미세한 차이점이 있지만, 대체로 우리가 짐작하는 그대로야.”

숙명(fate)은 귀결(resolved)과 미결(unresolved), 두 가지야. 미결 프라미스의 상태는 항상 보류지만, 귀결 프라미스는 세 가지 상태 중 하나가 될 수 있지. 물론 이룸 상태가 제일 일반적이지만.”

then에서 버림 처리할 Promise를 반환해도 단위 테스트에서는 귀결 부분으로 흘러갈 수 있다는 사실이 우리 직관에 다소 반하는 것 같지만, 이 버림 콜백이 귀결 프라미스나 (다음에 귀결 프라미스로 바뀔) 빈 값을 반환하는 일은 가능하겠지.”

승현이 끼어든다. “네 말대로 그게 가장 흔한 실수겠구만.”

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.