单个频道上不超过1024个待处理

时间:2014-07-15 08:56:42

标签: clojurescript core.async

我对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 ....之类的东西。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

为什么每次循环运行时都会创建一个全新的频道?也许你不应该在go循环中创建通道,只引用已经创建的通道。这往往更常见,性能更好。