我对core.async不太熟悉,但从我读过的内容来看,我知道我可以这样做:
;; fetch data
(defn get-data-from-server
[]
(let [ch (chan)]
(fetch-data-from-server (fn [result]
(put! ch result)))
ch))
;; echo data
(go-loop []
(let [v (<! (get-data-from-server))]
(.log js/console v)))
假设我需要每1000毫秒从服务器获取新数据,这就是我所做的:
(defn get-data-from-server
[]
(let [ch (chan)]
(.setInterval js/window
(fetch-data-from-server (fn [result]
(put! ch result))) 1000)
ch))
过了一段时间后,它抱怨No more than 1024 pending put on a single channel, consider using ....
之类的东西。有什么建议吗?
答案 0 :(得分:1)
为什么每次循环运行时都会创建一个全新的频道?也许你不应该在go循环中创建通道,只引用已经创建的通道。这往往更常见,性能更好。