더북(TheBook)

예제 6-1 checkInService.js

소스 파일 6장\Promises\checkInService_01.js

Conference.checkInService = function(checkInRecorder) {
'use strict';

// 주입한 checkInRecorder의 참조값을 보관한다.
var recorder = checkInRecorder;

return {
  checkIn: function(attendee) {
    attendee.checkIn();
    recorder.recordCheckIn(attendee).then(
      // 성공
      attendee.setCheckInNumber,
      // 실패
      attendee.undoCheckIn);
  }
};
};

recordCheckIn 로직을 비동기 처리한 다음(이때 then을 호출), 그 결과의 성공/실패에 따라 지정된 콜백을 부른다. 콜백은 attendee 객체에 이미 포함된 함수고 이름만 봐도 대략 무슨 일을 하는지 짐작할 수 있다. 자세한 내용은 전체 예제를 내려받아 살펴보라.

어쨌든 우리의 소원이 이루어지려면 recordCheckIn은 인자 2개(성공하면 호출할 함수와 실패하면 호출할 함수)를 받고 then 메서드를 가진 객체를 반드시 반환해야 한다. 이것이 바로 Promise의 핵심이다.

이러한 요건을 단위 테스트로 표현한 코드가 예제 6-2다. 예제 5-4에 테스트 하나를 추가해 약간 변형한 것이다.

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