我正在使用clj-http库进行远程调用。
(defn make-remote-call [endpoint]
(go (let [response (<! (http/get endpoint
{:with-credentials? false}))])))
(reset! app-state response)
;(js/console.log (print response)))))
以上打印到控制台工作正常
(defn call []
(let [x (r/atom (make-remote-call site))]
(js/console.log x)
这会在控制台中吐出#object[cljs.core.async.impl.channels.ManyToManyChannel]
。
如何在make-remote-call
函数中返回响应。
我使用响应来设置原子的值。尝试引用原子内的值会导致"Uncaught Error: [object Object] is not ISeqable"
和No protocol method IDeref.-deref defined for type null:
知道我可能做错了吗?
如果我需要提供任何其他信息,请告诉我
答案 0 :(得分:1)
make-remote-call
正在返回一个频道。试着询问这个频道,看看里面有什么。
这个问题应该有所帮助:
Why do core.async go blocks return a channel?
我想你已经知道了这一点,但你需要使用@
取消引用原子,即得到原子内的物质。从信息上讲,你想要的价值包含在两个容器中,所以你需要得到原子内部的东西,然后是通道内的东西。