如何在试剂中使用具有http请求结果的原子

时间:2017-01-24 01:27:25

标签: clojurescript reagent

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

等错误

知道我可能做错了吗?

如果我需要提供任何其他信息,请告诉我

1 个答案:

答案 0 :(得分:1)

make-remote-call正在返回一个频道。试着询问这个频道,看看里面有什么。

这个问题应该有所帮助:

Why do core.async go blocks return a channel?

我想你已经知道了这一点,但你需要使用@取消引用原子,即得到原子内的物质。从信息上讲,你想要的价值包含在两个容器中,所以你需要得到原子内部的东西,然后是通道内的东西。