That is not what happens in lein repl: user=> (use 'clojure.core.async) nil user=> (def pingc (chan)) #'user/pingc user=> (def ^:dynamic *text* "OUPS BAD ASYNC") #'user/*text* user=> (binding [*text* "good boy"] #_=> (go (while true #_=> (<! pingc) #_=> (println *text*)))) #<ManyToManyChannel clojure.core.async.impl.channels.ManyToManyChannel@79d236c2> user=> (defn ping [] (put! pingc :ping)) #'user/ping user=> (ping) good boy nil
It's of course up to core.async to preserve bindings within its body. But since it tries to pretend to run your `go` code 'as if it was synchronous', that's probably desirable? On Thursday, September 5, 2013 3:48:10 PM UTC+1, Meikel Brandmeyer (kotarak) wrote: > > Hi, > > Am Donnerstag, 5. September 2013 16:36:37 UTC+2 schrieb Mathias Picker: >> >> I just tried this test case (from Anderkent on IRC): >> >> (def pingc (chan)) >> >> (def ^:dynamic *text* "OUPS BAD ASYNC") >> >> (binding [*text* "good boy"] >> (go (while true >> (<! pingc) >> (js/alert *text*)))) >> >> (defn ping [] >> (put! pingc :ping)) >> >> (ping) >> >> and I get "OUPS BAD ASYNC". >> >> So, is this bug in cljs core.async? >> >> > This is to be expected, because the binding is reverted after the go call > returns. So the code in the go block (executed later on) sees the old, > initial binding. > > Meikel > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.