我遇到ClojureScript Core-Async问题。这只发生在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)
调用(foo :ok)
时,结果符合预期 - 函数cc
被调用两次,控制台显示cc: :ok cc: :ok after and
。
但是,在运行(foo 1)
时,函数cc
也会运行两次,控制台会显示cc: 1 cc: :ok
。因此,即使第一个条件未满,第二个条件仍然被检查!
答案 0 :(得分:0)
这显然是ClojureScript core.async库的一个错误。我为此打开了Jira issue。
与此同时,我可以通过使用:
来解决这个问题(go
(when (= :ok (<! (cc x))
(when (= :ok (<! (cc :ok)))
(print "after and")))))