欢迎!有关如何工作的更多信息,请参阅关于页面。
关于在 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,但我觉得它不需要这样。它被实现为一个相当简单的宏1。它具有相同的语法语义,而且绝对没有必要将任何函数“标记”为异步。它只是因为返回了一个承诺而变得异步。
async/await
我认为把编译器改为生成实际的 async/await 的代码不值得花费力气。这个宏让你用1%的努力就得到了90%的解决方案。对于像 promesa 这样的库也是同样的道理。这很容易在用户空间中解决。
promesa
的支持