我正在使用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
来最终操作结果,所以使用它的任何解决方案都完全没问题。
答案 0 :(得分:4)
我认为你不需要将来的块,clj-rethinkdb库返回的Cursor将会阻塞,直到它准备就绪。
您也可以使用doseq
代替可能更自然的循环。
我是clj-rethinkdb的维护者,我们已经在管道中进行了更改,以呈现core.async接口和新的Cursor抽象。如果您想尽早使用它,请结帐https://github.com/apa512/clj-rethinkdb/pull/55