簡體   English   中英

Clojurescript core-async:go里面的異步條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM