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