ClojureScript รันบน JavaScript VM สามารถจับ JavaScript Exceptions ได้ด้วย try/catch โดยใช้ js/Error สำหรับการโยน (throw) และจับ (catch)
รูปแบบการใช้งาน
;; โยน JavaScript Error
(js/Error. "Oops")
(throw (js/Error. "Error occurred!"))
;; จับ JavaScript Error
(try
(throw (js/Error. "Error occurred"))
(catch js/Error e
e)) ;; คืนค่า Error object
;; JavaScript โยนอะไรก็ได้ แต่ ClojureScript จับได้ด้วย :default
(try
(throw (js/Error. "Error Occurred!"))
(catch :default e
e))
รายละเอียด
js/Error- Constructor ของ JavaScript Error ใน ClojureScriptcatch js/Error e- จับเฉพาะ JavaScript Error objectscatch :default e- จับทุกอย่าง (Catch-all) รวมถึงค่าที่ไม่ใช่ Error object ที่ JS โยนมา- ClojureScript มี
ex-info/ex-dataสำหรับ Custom Errors แบบ Clojure
ตัวอย่างสมบูรณ์
(ns example.error-handling)
(defn risky-operation []
(throw (js/Error. "Something went wrong!")))
(defn safe-call []
(try
(risky-operation)
(catch js/Error e
(js/console.error "Caught JS Error:" (.message e))
{:error true, :message (.message e), :stack (.-stack e)})
(catch :default e
(js/console.error "Caught unknown:" e)
{:error true, :message "Unknown error"})))
;; ใช้งาน
(safe-call)
หมายเหตุ: ClojureScript Compile เป็น JavaScript ดังนั้น Exception Handling กลไกพื้นฐานคือของ JavaScript เอง