더북(TheBook)

6.3 프라미스 래퍼

 

“휴, 알아보니까 단위 테스트에서 Promise를 다루는 건 생각보다 까다롭더라고.” 샬럿이 젠체한다. “네가 짠 코드는 단순 무식하지만(왜 이 사람은 꼭 이런 식으로 얘기하는 걸까?) Promise를 귀결시킬 때 문제가 될 거야. 이미 귀결된 상태에서 Promise를 만드는 걸 말하는 게 아니고, 이미 그건 네가 한 일이니까(예제 6-2), 이미 있는 Promise의 귀결/버림 말이야. Promise API(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)를 뒤져보면 알겠지만 그건 불가능한 일이란 말이지!”

“음, 그것까진 몰랐네.” 승현은 솔직히 인정한다. “그런데 지금 보니 Promise 프로토타입에 thencatch 두 메서드가 있는데?”

“바로 그거야.” 샬럿의 눈빛이 번뜩인다. “하지만 벌써 똑똑한 사람들이(이 말 역시 기분 나쁘게 받아들이지 말자고 승현은 다짐한다) 유사 Promise 객체를 의존성으로 주입하는, 음…… 그러니까 Deferred 같은 래퍼를 만들어놨더라고. 이걸 단위 테스트할 때 진짜 프라미스나 가짜 프라미스처럼 활용할 수 있을 것 같아.”

“실제로 앵귤러JS(https://docs.angularjs.org/api/ng/service/$q)는 이렇게 쓰더라($q는 앵귤러 1.3에서 Q라는 프라미스 라이브러리(https://github.com/kriskowal/q)를 구현한 것이다).


var deferred = $q.defer(); // '미뤄진(deferred)' 객체를 생성한다.
var promise = deferred.promise; // promise라는 프로퍼티가 있다.
deferred.resolve(1234); // 1234 값으로 프라미스를 귀결한다.

“앵귤러JS 2.0에서는 더 개선될 예정이래.” 샬럿이 마무리한다(앵귤러 2.0 프라미스는 https://docs.google.com/document/d/1ksBjyCgwuiEUGn9h2NYQGtmQkP5N9HbehMBgaxMtwfs/ 3참고).

 

3 단축 URL은 https://goo.gl/ZHwJb9입니다.

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