(<! port)
takes a val from port. Must be called inside a (go ...) block. Will return nil if closed. Will park if nothing is available.
user=> (def c (chan 1))
#'user/c
user=> (go-loop [data (<! c)]
(println "Waited for => " data)
(println "No recur. Won't print again"))
#<ManyToManyChannel clojure.core.async.impl.channels.ManyToManyChannel@6a3d3df4>
user=> (put! c "Example Async Data")
nil
Waited for => Example Async Data
No recur. Won't print again
user=> (put! c "Example Async Data")
nil
;; Clojure 1.7
user=> (let [c (chan 1 (filter pos?))]
(go-loop []
(let [nums (<! c)]
(println nums))
(recur))
(doseq [n (range -10 10)]
(put! c n)))
nil
1
2
3
4
5
6
7
8
9