欢迎!有关如何工作的更多信息,请参阅关于页面。
关于在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
请注意,shadow-cljs已经有一段时间支持js-await了。
js-await
查看相关公告 https://clojureverse.org/t/promise-handling-in-cljs-using-js-await/8998
这还不完全是async/await,但如果您问我,我觉得不一定非要是。这被实现为一个相当简单的宏。它具有相同的语法语义,而且绝对没有必要为任何函数“标记”为异步。它只是因为返回一个承诺而如此。
async/await
我认为更改编译器以生成实际的async/await不值得付出努力。这个宏能以1%的代价给你90%的解决方案。同样也适用于像promesa这样的库。这可以在用户空间中轻松解决。
promesa