请在2024 Clojure状态调查!中分享您的想法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

+6
ClojureScript

关于在ClojureScript中添加ES2018 async/await特性的讨论在网上很多,无论是功能请求[1][2],提案[3],还是实验[4][5]。

我提出这个问题是为了有一个集中的地方让人们可以点赞并引起Clojure核心团队的注意,并可能帮助优先考虑这个特性的考虑。

我知道,这并不像给输出的JS代码添加关键词那么简单。我知道有像promesa、core.async、或kitchen-async这样的宏作为解决方案。我也知道,在添加此特性时必须有一个强大的使用案例。所有我提到的和更多的东西都在下面的链接中讨论过。

[1] https://groups.google.com/g/clojurescript/c/scUMhU-ctEM
[2] https://www.reddit.com/r/Clojure/comments/f4nlau/clojurescript_and_asyncawait/
[3] https://observablehq.com/@shaunlebron/proposal-generators-and-async-functions-in-clojurescript#blockers
[4] https://twitter.com/roman01la/status/1155602189311717377
[5] https://twitter.com/borkdude/status/1639579880336621570

请注意,squint和cherry都支持async/await:https://github.com/squint-cljs/cherry

我应该支持名称`js-await`,因为它更合理,考虑到有js-delete等。

如果CLJS核心团队决定他们想要有async/await,我在此自愿承担实现它(因为我已经不得不在cherry/squint中解决这个问题,我认为用不了多长时间)。

与此同时,Promesa相当不错。

1 个答案

+3

请注意,shadow-cljs已经有一段时间支持js-await了。

查看相关公告
https://clojureverse.org/t/promise-handling-in-cljs-using-js-await/8998

这还不完全是async/await,但如果您问我,我觉得不一定非要是。
这被实现为一个相当简单的宏。它具有相同的语法语义,而且绝对没有必要为任何函数“标记”为异步。它只是因为返回一个承诺而如此。

我认为更改编译器以生成实际的async/await不值得付出努力。这个宏能以1%的代价给你90%的解决方案。同样也适用于像promesa这样的库。这可以在用户空间中轻松解决。

...