ClojureScript에 Async/Await 도입

2 hours ago 1
  • ClojureScript 1.12.145는 ^:async 힌트를 붙인 함수를 JavaScript async function으로 출력하도록 컴파일러가 변경됨
  • await로 Promise 값을 기다리는 ClojureScript 함수를 작성할 수 있어 JavaScript 상호운용성이 개선됨
  • 테스트에도 ^:async 를 사용할 수 있으며, await로 비동기 함수 호출 결과 검증이 가능함
  • 최근 Clojure 설문에서 async functions 지원이 JavaScript 상호운용성 관련 ClojureScript 개선 요구 중 가장 높은 비중을 차지함
  • 최신 브라우저 API와 인기 라이브러리를 다루는 일반적인 경우 추가 의존성을 도입할 필요가 줄어들며, 전체 변경 목록은 ClojureScript changelog의 1.12.145 항목에서 확인 가능함

^:async와 await 사용

  • ClojureScript 1.12.145는 ^:async 힌트를 붙인 함수를 JavaScript async function으로 출력하도록 컴파일러가 변경됨
  • ClojureScript가 ECMAScript 2016을 대상으로 하게 되면서 JavaScript 상호운용성 개선 영역을 신중히 선택할 수 있게 됨
  • await를 사용해 Promise 값을 기다리는 ClojureScript 함수 작성이 가능해짐 (refer-global :only '[Promise]) (defn ^:async foo [n] (let [x (await (Promise/resolve 10)) y (let [y (await (Promise/resolve 20))] (inc y)) ;; not async f (fn [] 20)] (+ n x y (f))))
  • 테스트에도 ^:async를 사용할 수 있으며, await로 비동기 함수 호출 결과를 검증할 수 있음 (deftest ^:async defn-test (try (let [v (await (foo 10))] (is (= 61 v))) (let [v (await (apply foo [10]))] (is (= 61 v))) (catch :default _ (is false))))

배경과 변경 목록

  • 최근 Clojure 설문에서 async functions 지원이 JavaScript 상호운용성 관련 ClojureScript 개선 요구 중 가장 높은 비중을 차지함
  • 이번 개선으로 최신 브라우저 API와 인기 라이브러리를 다루는 일반적인 경우 추가 의존성을 도입할 필요가 줄어듦
  • 전체 수정, 변경, 개선 목록은 ClojureScript changelog의 1.12.145 항목에서 확인 가능함
  • ClojureScript 1.12.145에는 커뮤니티 구성원 Michiel Borkent가 기여함
Read Entire Article