我在写一些文字记录,做一些日志处理。我正在包装一个Javascript库,每当一个新的日志条目到达时,它就会给我一个回调。
(.on my-logs-source "log-entry" handle-log-event)我想对这些事件执行一些简单的聚合,比如clojure的partition-by函数,它返回换能器,并得到结果的向量。将事件回调流转换为我可以应用传感器的东西的惯用方法是什么?
发布于 2017-03-25 21:06:29
您可以使用clojure.async -它的通道可选择接受传感器时,建设。
下面的示例说明了如何实现目标。
(require '[clojure.core.async :as async])
(def ch (async/chan 1 (partition-by odd?)))
(def callback (fn [n] (async/put! ch n)))
(async/go-loop []
(when-some [v (async/<! ch)]
(println "Got" v)
(recur)))
(callback 1)
(callback 1)
(callback 2)
(callback 2)
(callback 3)
(callback 4)上面的代码将创建一个带有换能器的通道。您的回调函数将将接收到的所有值发送到该信道。go块将在通道可用时使用来自通道的值。从通道消耗的值是由传感器产生的结果。
例如,go块的控制台输出上面的REPL会话如下所示:
Got [1 1]
Got [2 2]
Got [3]现在当你关闭频道时:
(async/close! ch)其余的数据将从你的换能器“冲洗”:
Got [4]https://stackoverflow.com/questions/43019379
复制相似问题