我如何使JS错误对象的编写器通过电线发送?当我执行(pr-str (js/Error. "OOPS"))
时,它会给我"#object[Error Error: OOPS]"
。 (js->clj (js/Error. "Oops!"))
给出类似#object[Error Error: Oops!]
的信息。我想为JS错误编写程序,以便我可以通过电线(也许是EDN)发送它们,并在另一端反序列化。
ClojureScript除了js/Date
之类的某些例外之外,不会尝试使用构造函数序列化JS对象。对于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]
。