如何处理ClojureScript中的无限序列,对每个元素执行DOM操作,然后在继续之前等待一段时间(例如,如果我想在显示每秒递增一次的数字的页面上设置div )?
使用dommy库进行DOM交互,这是一个(非工作)代码示例:
(def container (sel1 :#container))
(defn integers [] (iterate inc 0))
(js/setInterval
(fn []
(dommy/set-text! container (nth (integers) i)) ; whence i?
)
1000)
显然,索引这个序列不是一个长期的解决方案。
答案 0 :(得分:1)
例如,这可以起作用:
(def container (sel1 :#container))
(def integers (iterate inc 0))
(defn set-int! [[x & rs :as nums]]
(when nums
(js/setTimeout
#(do (dommy/set-text! container i)
(set-int! rs))
1000)))
(set-int! integers)
无论如何,你想要完成什么?制作一个计数器是一种非常奇怪的方式,你将用无限的序列来吹嘘记忆。
使用原子可以更加清洁和高效:
(def container (sel1 :#container))
(def set-int! (partial dommy/set-text! container))
(def counter (atom 0))
(js/setInterval
#(do (swap! counter inc)
(set-int! @counter))
1000)