Clojurescript core-async:go

时间:2016-01-26 12:06:48

标签: clojure clojurescript

我遇到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。因此,即使第一个条件未满,第二个条件仍然被检查!

1 个答案:

答案 0 :(得分:0)

这显然是ClojureScript core.async库的一个错误。我为此打开了Jira issue

与此同时,我可以通过使用:

来解决这个问题
(go
  (when (= :ok (<! (cc x))
    (when (= :ok (<! (cc :ok)))
      (print "after and")))))