首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将传感器应用于事件回调流

将传感器应用于事件回调流
EN

Stack Overflow用户
提问于 2017-03-25 17:10:49
回答 1查看 106关注 0票数 2

我在写一些文字记录,做一些日志处理。我正在包装一个Javascript库,每当一个新的日志条目到达时,它就会给我一个回调。

代码语言:javascript
复制
(.on my-logs-source "log-entry" handle-log-event)

我想对这些事件执行一些简单的聚合,比如clojure的partition-by函数,它返回换能器,并得到结果的向量。将事件回调流转换为我可以应用传感器的东西的惯用方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-25 21:06:29

您可以使用clojure.async -它的通道可选择接受传感器时,建设。

下面的示例说明了如何实现目标。

代码语言:javascript
复制
(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会话如下所示:

代码语言:javascript
复制
Got [1 1]
Got [2 2]
Got [3]

现在当你关闭频道时:

代码语言:javascript
复制
(async/close! ch)

其余的数据将从你的换能器“冲洗”:

代码语言:javascript
复制
Got [4]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43019379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档