Clojure RethinkDB 订阅变更源

Clojure RethinkDB subscribe to a changefeed

我正在使用Clojure driver for RethinkDB。 我想从查询中获取更改提要。这是我目前所拥有的:

(defn change-feed [conn]
  (loop [changes (future
                   (-> (r/db "mydb")
                       (r/table "mytable")
                       r/changes
                       (r/run conn)))]
    (println "date : " ((comp :name :newval) first @changes)) ;;prints nil
    (recur (rest changes))))

它在调用时阻塞在我的 REPL 中(这是正常的)。然后我使用 RethinkDB 接口添加数据。它打印 nil 并且出现以下错误:

IllegalArgumentException Don't know how to create ISeq from: clojure.core$future_call$reify__6736  clojure.lang.RT.seqFrom (RT.java:528)

我做错了什么?我希望能够:

注意:我打算最后用manifold来操作结果,所以任何使用它的解决方案都是完全没问题的。

我认为您在那里不需要 future 块,clj-rethinkdb 库返回的 Cursor 将一直阻塞直到准备就绪。

您也可以使用 doseq 而不是循环,这可能更自然。

我是 clj-rethinkdb 的维护者,我们正在进行更改以呈现 core.async 界面和新的 Cursor 抽象。如果您想早点使用它,请查看 https://github.com/apa512/clj-rethinkdb/pull/55