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
我正在使用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