2026年5月7日,ClojureScript 团队发布了 1.12.145 版本,正式支持 JavaScript async 函数。这是 ClojureScript 社区呼声最高的功能之一,在最近的 Clojure 调查中位居开发者最期望的 JavaScript 互操作增强榜首。
新功能:^:async 标记
现在,开发者只需在函数定义上添加 ^:async 标记,ClojureScript 编译器就会将其编译为 JavaScript 的 async 函数:
(refer-global :only '[Promise])
(defn ^:async foo [n]
(let [x (await (Promise/resolve 10))
y (let [y (await (Promise/resolve 20))]
(inc y))
;; 非 async 的普通函数
f (fn [] 20)]
(+ n x y (f))))
编译后的代码可以直接使用 await 关键字,与 Promise 和现代浏览器 API 无缝配合。
测试也支持 async
异步测试同样可以直接使用 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))))
为什么这个更新重要?
在此次更新之前,ClojureScript 开发者如果要与异步 JavaScript API(如 Fetch、WebSocket、IndexedDB 等)交互,通常需要依赖第三方库(如 promesa 或 core.async)来处理 Promise。现在,原生的 async/await 支持大大简化了这些常见场景。
ClojureScript 现在目标 ECMAScript 2016 标准,这让它能够有选择地增强与现代 JavaScript 的互操作性。
对前端开发者的启示
如果你正在使用或考虑使用 ClojureScript:
- 这是升级的最佳时机,async/await 大幅改善开发体验
- 可以逐步移除第三方异步处理库的依赖
- 与 React、Next.js 等现代框架的集成更加自然
- 对于函数式编程爱好者,ClojureScript + async/await 是一个非常有吸引力的组合
完整更新日志请查看 ClojureScript 官方网站。
© 版权声明
THE END
















暂无评论内容