【发布时间】:2017-08-31 00:56:25
【问题描述】:
我试图在我的 REPL 中找出 core.async 并且对于我对 (go-loop ...) 的使用如何不符合异步目的的“go block”资格感到完全困惑/>!
我的 go-loop 就像......
(async/go-loop [page (range 3)]
(if (empty? page)
(async/close! ch)
(dorun (map (fn [row]
(println row)
(async/>! ch row)) page)))
(recur (range (dec (count page)))))
但是 REPL 很不高兴...
=>
#object[clojure.core.async.impl.channels.ManyToManyChannel
0x23465937
"clojure.core.async.impl.channels.ManyToManyChannel@23465937"]
0
Exception in thread "async-dispatch-12" java.lang.AssertionError: Assert failed: >! used not in (go ...) block
nil
...
为什么(go-loop ...) 的范围不足以进行(async/>! row) 调用?
我什至应该在这里使用 go-loop 吗?
【问题讨论】:
-
@OlegTheCat 答案可能是一样的,但不是完全相同的问题。就像 2 + 5 = 7 和 8 - 1 = 7 并不是同一个问题,即使答案相同。换句话说,如果一个人非常熟悉 core.async 这可能看起来像同一个问题,但对于新人来说......说谷歌搜索那个异常消息,你在寻找这个异常消息时不会遇到那个 Clojurescript 问题。
标签: clojure core.async