2017-01-24 4 views
2

これは、clj-httpライブラリを使用してリモート呼び出しを行うために使用しています。コンソールに試薬でhttp-requestの結果を持つアトムの使用方法

(defn make-remote-call [endpoint] 
    (go (let [response (<! (http/get endpoint 
         {:with-credentials? false}))]))) 
    (reset! app-state response) 
    ;(js/console.log (print response))))) 

上記のプリントが、これは、コンソールで#object[cljs.core.async.impl.channels.ManyToManyChannel]を吐き出す

(defn call [] 
    (let [x (r/atom (make-remote-call site))] 
    (js/console.log x) 

正常に動作します。

make-remote-call機能で応答を返すにはどうすればよいですか。

私はレスポンスを使って原子の値を設定しました。原子内の値を参照しようとすると、エラーが発生します"Uncaught Error: [object Object] is not ISeqable"No protocol method IDeref.-deref defined for type null:

どうしたらいいですか?

私は任意の追加情報

答えて

0

make-remote-callがチャンネルを返して提供する必要がある場合は私に知らせてください。このチャンネルを調べて、そのチャンネルの内容を確認してください。

この質問は助けるべきである:

Why do core.async go blocks return a channel?

を私はあなたがすでにこのことを知っていると思うが、あなたは原子すなわち@を使用して、原子の内側にあるものを手に入れる参照を解除する必要があります。あなたが望む値は、2つのコンテナに包まれているので、原子の内側にあるものを取得し、チャネルの内部にあるものを取得する必要があります。