> > > not quite! core.async doesn't allow you to cancel a go-block (to my > knowledge), which JS allows. I added a section on this: > > > https://beta.observablehq.com/@shaunlebron/proposal-generators-and-async-functions-in-clojurescript#coreasync > > This is incorrect. Closing a channel can be used to "end" a loop. In addition it is possible to use alt! or alts! with an additional "control" channel (or more) and "selecting" which channel to work on.
(defn foo [] (let [ch (async/chan)] (go (loop [i 100] (when (pos? i) (<! (async/timeout 1000)) (when (>! ch i) (recur (dec i))))) (prn :loop-terminated)) ch)) (go (let [ch (foo)] (prn (<! ch)) (prn (<! ch)) (async/close! ch) (prn (<! ch)))) In addition the "loop" is dependent on the "ch" reference. If that gets garbage collected the loop will be as well, similar to generators or async/await. -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojurescript+unsubscr...@googlegroups.com. To post to this group, send email to clojurescript@googlegroups.com. Visit this group at https://groups.google.com/group/clojurescript.