ClojureScript 终于支持 async/await:1.12.145 版本重要更新

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 等)交互,通常需要依赖第三方库(如 promesacore.async)来处理 Promise。现在,原生的 async/await 支持大大简化了这些常见场景。

ClojureScript 现在目标 ECMAScript 2016 标准,这让它能够有选择地增强与现代 JavaScript 的互操作性。

对前端开发者的启示

如果你正在使用或考虑使用 ClojureScript:

  • 这是升级的最佳时机,async/await 大幅改善开发体验
  • 可以逐步移除第三方异步处理库的依赖
  • 与 React、Next.js 等现代框架的集成更加自然
  • 对于函数式编程爱好者,ClojureScript + async/await 是一个非常有吸引力的组合

完整更新日志请查看 ClojureScript 官方网站。

来源:ClojureScript – 1.12.145 Release

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容