请在2024年Clojure调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

+6
ClojureScript

网络上关于将ES2018中的async/await添加到ClojureScript的讨论很多,无论是功能请求[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不值得花费精力。这个宏提供了90%的解决方案,只需要1%的努力。这对于像promesa这样的库来说也是一样。这可以在用户空间中轻松解决。

...