Несколько блоков прослушивания/перехода для канала в ClojureScript

Учитывая канал в ClojureScript

(def navigation (chan))

Возможно ли иметь несколько блоков go, которые извлекают из него значения? Например.

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

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

Ввод значения с помощью:

(put! channels/navigation "/styles")

Похоже, это не работает и выполняется только в первом блоке Go. Это немного надуманный пример, но я хочу использовать этот шаблон, чтобы иметь несколько слушателей для канала, который будет возвращать JSON из службы socket.io.


person Samuel    schedule 25.01.2015    source источник


Ответы (2)


Чтение из канала вернет значение и удалит его из канала. Если вы хотите, чтобы несколько считывателей считывали одни и те же значения, вам нужно несколько каналов; взгляните на функции core.async mult и tap.

person Joost Diepenmaat    schedule 26.01.2015
comment
Спасибо @Joost. Я понял это примерно через 10 минут после того, как создал тикет и проголосовал за его закрытие как дубликат другого тикета, который я нашел. Спасибо за ответ. - person Samuel; 28.01.2015

Вы можете заглянуть в pub и sub в core.async. Это по-прежнему означает несколько каналов, как упоминал @Joost.

person rojoca    schedule 26.01.2015