ClojureScript 上 core.async 的超时

Timeouts with core.async on ClojureScript

我有一个从 ClojureScript 端口读取值的循环。在预定义的超时(比如 5 秒)后,我需要 退出循环 如果没有出现任何值超过另一个预定义的超时(比如 200 毫秒)我还需要 退出循环.

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

这可能吗?

使用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
  )