[英]Clojurescript core-async: Async condition inside go
我有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
顯示cc: :ok cc: :ok after and
。 但是,當運行(foo 1)
,函數cc
也會運行兩次,控制台顯示cc: 1 cc: :ok
。 因此,即使第一個條件沒有滿滿,第二個條件仍然被檢查!
這顯然是ClojureScript core.async庫的一個錯誤。 我為此開了一個Jira問題 。
與此同時,我通過使用以下方法解決了這個問題:
(go
(when (= :ok (<! (cc x))
(when (= :ok (<! (cc :ok)))
(print "after and")))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.