ClojureScript中的多个侦听器/ go块用于通道

时间:2015-01-25 22:15:06

标签: clojure clojurescript core.async

给出ClojureScript中的频道

(def navigation (chan))

是否可以使用多个go块来消除它的价值? E.g。

(go
 (while true
   (secretary/dispatch! (<! navigation))))

(go
 (while true
   (println (<! navigation))))

将值放入:

(put! channels/navigation "/styles")

这似乎不起作用,只在第一个Go块中执行。这是一个人为的例子,但我确实希望使用这种模式让一个通道有多个监听器,它将从socket.io服务返回JSON。

2 个答案:

答案 0 :(得分:2)

从频道读取将返回该值并将其从频道中删除。如果您希望多个读者读取相同的值,则需要多个通道;看一下core.async mult和tap功能。

答案 1 :(得分:0)

您可能希望查看core.async中的pubsub函数。这仍然意味着@Joost提到的多个渠道。