Сериализация JavaScript объектов в ClojureScript - PullRequest
0 голосов
/ 20 февраля 2020

Как мне сделать писатель для JS объекта ошибки для отправки через провод? Когда я делаю (pr-str (js/Error. "OOPS")), это дает мне "#object[Error Error: OOPS]". И (js->clj (js/Error. "Oops!")) дает что-то вроде #object[Error Error: Oops!]. Я хочу сделать запись для ошибок JS, чтобы я мог отправить их через провод (возможно, EDN) и десериализовать на другом конце.

1 Ответ

1 голос
/ 20 февраля 2020

ClojureScript не пытается сериализовать JS объекты с конструктором, за исключением некоторых исключений, таких как js/Date. В случае js/Error имеет смысл сначала спросить: как бы это было решено в мире JS? Один ответ доступен здесь: { ссылка }

(.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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...