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

Multiple listeners / go blocks for channel in ClojureScript

在 ClojureScript 中给定一个通道

(def navigation (chan))

是否可以有多个 go 块从中提取值?例如

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

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

将值放入:

(put! channels/navigation "/styles")

这似乎不起作用,只在第一个 Go 块中执行。这是一个人为的例子,但我确实想使用这种模式让多个侦听器从 socket.io 服务return JSON 接收一个频道。

从频道读取 return 值并将其从频道中删除。如果您希望多个读者读取相同的值,则需要多个渠道;查看 core.async mult 和 tap 函数。

您可能想查看 core.async 中的 pub and sub 函数。这仍然意味着@Joost 提到的多个渠道。