我制作了用于通过 id 获取单个对象的服务端点 api,它按预期工作。我用 Postman 和处理函数对其进行了测试。我将 cljs-ajax 库用于异步客户端。当我得到响应时,我无法更改试剂原子的状态。这是代码:
(ns businesspartners.core
(:require [reagent.core :as r]
[ajax.core :refer [GET POST]]
[clojure.string :as string]))
(def business-partner (r/atom nil))
(defn get-partner-by-id [id]
(GET "/api/get-partner-by-id"
{:headers {"Accept" "application/transit+json"}
:params {:id id}
:handler #(reset! business-partner (:business-partner %))}))
当我尝试访问业务伙伴原子时,该原子的值为零。我不知道为什么,因为另一种方法几乎相同,除了它获取业务合作伙伴列表并且工作正常。
当我更改 get-partner-by-id 函数时:
(defn get-partner-by-id [id]
(GET "/api/get-partner-by-id"
{:headers {"Accept" "application/transit+json"}
:params {:id id}
:handler (fn [arg]
(println :handler-arg arg)
(reset! business-partner (:business-partner arg))
(println "Business partner from handler: " @business-partner))}))
浏览器控制台中的输出:
:handler-arg {:_id 5e7ad2c84b5c2d44583e8ecd,
:address Main Street,
:email nenmit@gmail.com,
:phone 555888,
:name Nen Mit}
Business partner from handler: nil
因此,如您所见,我根据需要将对象放在处理程序中,但是当我尝试重置原子时,什么也没有发生。这就是我认为的问题的核心。谢谢艾伦。