欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。
网络上关于将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
请注意,shadow-cljs已经支持js-await有一段时间了。
js-await
请在此处查看公告帖子 https://clojureverse.org/t/promise-handling-in-cljs-using-js-await/8998
这并不完全是async/await,但如果您问我,我认为它不必是。它被实现为一个相当简单的宏。它具有相同的语法语义,而且绝对没有必要将任何函数标为异步。它只是因为返回一个承诺而成为异步。
async/await
我认为将编译器更改以生成实际的async/await不值得花费精力。这个宏提供了90%的解决方案,只需要1%的努力。这对于像promesa这样的库来说也是一样。这可以在用户空间中轻松解决。
promesa