There is not. On Monday, January 14, 2013, Stuart Campbell wrote:
> Sorry to dig up such an old thread. > > I'd also like to maintain the bindings of dynamic vars across asynchronous > function calls. > > Is there a workaround that people use in the absence of bound-fn, etc? > > Cheers, > Stuart > > On Friday, 27 January 2012 16:49:10 UTC+11, Brandon Bloom wrote: >> >> The ClojureScript >> wiki<https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure>states >> that "the user experience of [binding] is similar to that in >> Clojure" but my very first experiment produced wildly different results >> between platforms. >> >> Here's a Clojure on the JVM session: >> >> user=> (import java.lang.Thread) >> java.lang.Thread >> user=> (defn set-timeout [ms fn] (.run (Thread. #(do (Thread/sleep ms) >> (fn))))) >> #'user/set-timeout >> user=> (def x "top level") >> #'user/x >> user=> (binding [x "in binding"] (println x) (set-timeout 1000 #(println >> x))) >> in binding >> in binding >> nil >> >> And here's the analogous ClojureScript session: >> >> ClojureScript:cljs.user> (def x "top level") >> "top level" >> ClojureScript:cljs.user> (binding [x "in binding"] (println x) >> (js/setTimeout #(println x) 1000)) >> in binding >> 21 >> top level >> >> So ignoring the sequencing and nil vs timeout-id return values, the >> binding of 'x wasn't preserved in the asynchronous callback. >> >> I raised this issue in #clojure and @dnolen said that "that's the >> behavior there's nothing much to fix", but that didn't sit right with me. >> This seems like either 'binding is bugged, or maybe I don't understand >> something about its intent. >> >> On the topic of "Vars" proper, I understand their usefulness in >> repl-centric development, where you can redefine functions at runtime. The >> wiki also makes some mention of this, but I can't wrap my head around the >> context and jargon. I've run into this problem before in Javascript, where >> some level of indirection is necessary to support run-time redefinitions. >> You can't do `var fn = package.fn;` and dynamically redefine `fn` from >> `package` later because a copy of the reference is made. How does >> ClojureScript address this problem? >> >> Cheers, >> Brandon >> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to > [email protected]<javascript:_e({}, 'cvml', > '[email protected]');> > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] <javascript:_e({}, 'cvml', > 'clojure%[email protected]');> > 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 post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
