0

如何让 JS 错误对象的编写器通过网络发送?当我这样做(pr-str (js/Error. "OOPS"))时,它给了我"#object[Error Error: OOPS]"。并(js->clj (js/Error. "Oops!"))给出类似#object[Error Error: Oops!]. 我想为 JS 错误创建一个编写器,这样我就可以通过网络(可能是 EDN)发送它们并在另一端反序列化。

4

1 回答 1

1

ClojureScript 不会尝试使用构造函数序列化 JS 对象,除了一些例外,例如js/Date. 在 的情况下js/Error,首先要问:在 JS 世界中如何解决这个问题?此处提供了一个答案:https ://stackoverflow.com/a/26199752/564509

(.stringify js/JSON (.getOwnPropertyNames js/Object err))

如果您需要将错误序列化为不是 JSON 而是作为 EDN,您只需自己迭代错误自己的属性名称并填写数据结构。就像是

(defn err->edn [e]
  (into {}
        (map (fn [k]
               [(keyword k) (js->clj (gobject/get e k))]))
        (.getOwnPropertyNames js/Object e)))

哪里gobject是必需的[goog.object :as gobject]

于 2020-02-20T10:04:26.613 回答