Browse Source

enhance: catch error when thread-api throws

rcmerci 3 days ago
parent
commit
11e6eaf222
1 changed files with 15 additions and 4 deletions
  1. 15 4
      src/main/frontend/common/thread_api.cljc

+ 15 - 4
src/main/frontend/common/thread_api.cljc

@@ -22,6 +22,15 @@
 
 #?(:cljs (def *profile (volatile! {})))
 
+#?(:cljs
+   (defn- write-transit-str-with-catch
+     [v qualified-kw-str]
+     (try
+       (ldb/write-transit-str v)
+       (catch :default e
+         (log/error :thread-api-write-transit-failed-2 qualified-kw-str)
+         (throw e)))))
+
 #?(:cljs
    (defn remote-function
      "Return a promise whose value is transit-str."
@@ -37,8 +46,10 @@
                (if (fn? result) ;; missionary task is a fn
                  (js/Promise. result)
                  result)]
-           (p/let [result' result-promise]
-             (if direct-pass?
-               result'
-               (ldb/write-transit-str result'))))
+           (->
+            (p/let [result' result-promise]
+              (if direct-pass?
+                result'
+                (write-transit-str-with-catch result' qualified-kw-str)))
+            (p/catch (fn [e] (write-transit-str-with-catch e qualified-kw-str)))))
          (throw (ex-info (str "not found thread-api: " qualified-kw-str) {}))))))