더북(TheBook)

그러나 앞서 언급했듯이 이러한 스타일을 남용하면 코드를 추측하기 어렵습니다. 따라서 지속적으로 일급 객체(first-class citizen)를 만들고 실제로 ‘연속’이 무엇을 의미하는지 구체적인 해석을 정의해 나아가야 합니다. 그래서 ‘X를 실행한 다음(then) Y를 실행하라’의 then이라는 개념을 소개하고자 다음 코드를 작성했습니다

 

 

이 부분이 Promise가 도입되는 곳입니다. Promise는 비동기와 장기 실행 연산 그리고 결과나 에러를 구독할 수 있는 미래 값을 래핑한 데이터 유형으로, 기본 작업이 완료되어 계산된 결괏값을 구독자(subscriber)가 받게 될 때 프로세스가 완료된 것으로 간주합니다. Promise가 실행된 후에는 값을 변경할 수 없으므로 사실상 함수형 특성인 불변 타입입니다. 또 다른 Promise 구현은 Promise/A+ 프로토콜5을 기반으로 하며, 일정 수준의 에러 처리와 then() 메서드를 통한 연속을 제공하게 설계되었습니다. ajax()Promise를 반환한다고 가정할 때 앞서 다룬 예제를 처리하는 방법은 다음과 같습니다.

ajax('<host1>/items')
.then(items => 
  items.forEach(item =>
    ajax(<host2>/data/${item.getId()}/info`)
      .then(dataInfo => 
        ajax(`<host3>/data/files/${dataInfo.files}`)
      )
      .then(processFiles);
  )
);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.