Asynchronous Clojure订阅changefeed
我在用电脑。 我想从查询中获取更改提要。以下是我到目前为止的情况:Asynchronous Clojure订阅changefeed,asynchronous,clojure,rethinkdb,Asynchronous,Clojure,Rethinkdb,我在用电脑。 我想从查询中获取更改提要。以下是我到目前为止的情况: (defn change-feed [conn] (loop [changes (future (-> (r/db "mydb") (r/table "mytable") r/changes (r/run conn)))] (printl
(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(这是正常的)。然后,我使用REJECTDB接口添加数据。它打印nil
,我得到以下错误:
IllegalArgumentException Don't know how to create ISeq from: clojure.core$future_call$reify__6736 clojure.lang.RT.seqFrom (RT.java:528)
我做错了什么?我希望能够:
- 从这个未来获取项目
- 还要知道我一次可以带多少物品(如果有几件正在等待)
注意:我计划最终使用操作结果,因此使用它的任何解决方案都是完全正确的。我认为您不需要在那里使用future块,clj数据库库返回的光标将一直阻塞,直到它准备好为止 您还可以使用
doseq
而不是更自然的循环
我是clj数据库的维护人员,我们已经进行了一些更改,以提供一个core.async接口和一个新的游标抽象。如果您想早点使用,请结账谢谢,我会看一看。也谢谢你做这个。请注意,我也很乐意使用core.async接口。不,如果光标阻塞,您如何在REPL中进行测试?您可以打开第二个REPL?我想我可以。。。急切地等待你的PR被合并:)PS:在你的回答中,你的意思是“不需要”对吗?