Clojurescript核心异步:go内的异步条件
我对ClojureScript核心异步有问题。这只发生在ClojureScript中,而不发生在Clojure中 我有以下代码:Clojurescript核心异步:go内的异步条件,clojure,clojurescript,Clojure,Clojurescript,我对ClojureScript核心异步有问题。这只发生在ClojureScript中,而不发生在Clojure中 我有以下代码: (defn cc [x] (go (println "cc: " x) x)) (defn foo [x] (go (when (and (= :ok (<! (cc x))) (= :ok (<! (cc :ok)))) (print "after and")))) (foo
(defn cc [x]
(go
(println "cc: " x)
x))
(defn foo [x]
(go
(when (and (= :ok (<! (cc x)))
(= :ok (<! (cc :ok))))
(print "after and"))))
(foo 1)
(foo :ok)
(defn cc[x]
(去
(println“cc:”x)
x) )
(defn foo[x]
(去
(何时)和(=:正常(
调用(foo:ok)
时,结果与预期一致-函数cc
被调用两次,控制台显示cc::ok cc::ok after and
。
但是,当运行(foo 1)
时,函数cc
也会运行两次,控制台显示cc:1 cc::ok
。因此,即使第一个条件未完全满足,第二个条件仍会被选中!这显然是ClojureScript core.async库的一个错误。我为此打开了一个
在此期间,我可以通过以下方式解决此问题:
(go
(when (= :ok (<! (cc x))
(when (= :ok (<! (cc :ok)))
(print "after and")))))
(开始
(when=:ok(这听起来像个bug,不是问题;我建议您报告项目的github问题并报告版本号。@TimothyPratley您是对的。这是个bug。我为它打开了一个Jira问题:Groovy!感谢您的报告。)。