在ClojureScript上使用core.async超时

pup*_*eno 3 clojure clojurescript core.async

我有一个来自ClojureScript端口的循环读取vals.在预定义的超时(比如5秒)之后,我需要退出循环,如果没有出现超过另一个预定义超时(例如,200毫秒)的val,我还需要退出循环.

通过激励循环我的意思是,结束它并运行其他东西,例如另一个函数.

这可能吗?

Leo*_*hin 8

使用 alts!

;; within your go-loop:

(let [[val ch] (alts! [my-ch (timeout 500)])]
  (when (identical? my-ch ch)
    ;; dispatch val here...
    (recur))
  ;; not calling recur here, to exit the loop
  )
Run Code Online (Sandbox Code Playgroud)