Clojurescript核心异步:go内的异步条件

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

我对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 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!感谢您的报告。)。