欢迎!请访问关于页面获取更多关于如何操作的信息。
https://script.clojure.org/guides/promise-interop
这是设置核心异步用于
(:require [cljs.core.async :refer [go]] [cljs.core.async.interop :refer-macros [<p!]])
我们正在使用当前的shadow-cljs和node目标,并发现这个方案将'go'暴露为函数而不是宏。
用:refer-macros [go]替换可以解决这个问题
你能解释你遇到的问题吗?暴露为函数是什么意思?
/t/async ❯❯❯ clj -A:cljs:async -m cljs.main -re node -r ClojureScript 1.10.773 cljs.user=> (require '[clojure.core.async :as a :refer [go]]) nil cljs.user=> (doc go) ------------------------- cljs.core.async/go ([& body]) Macro Asynchronously executes the body, returning immediately to the calling thread. Additionally, any visible calls to <!, >! and alt!/alts! channel operations within the body will block (if necessary) by 'parking' the calling thread rather than tying up an OS thread (or the only JS thread when in ClojureScript). Upon completion of the operation, the body will be resumed. Returns a channel which will receive the result of the body when completed nil cljs.user=>(let [x (go 3)] (go (prn (a/<! x)))) #object[cljs.core.async.impl.channels.ManyToManyChannel] cljs.user=> 3
此外,这应该是没有问题的。
上面的相关部分隐式宏加载:如果一个命名空间被要求或使用,并且该命名空间本身请求或使用其自身的宏,那么将使用相同的规范隐式地要求或使用这些宏。此外,在这种情况下,宏变量可以包含在:refer或:only规范中。这通常简化了库的使用,使得消费命名空间无需担心明确区分某些变量是函数还是宏。例如