有没有更好的方法来捕获 clojurescript 中的 javascript 错误?

Is there a better way to catch javascript errors in clojurescript?

我一直在 clojurescript 中使用 firebase,我尝试了这里的建议:

How to catch any Javascript exception in Clojurescript?

我目前的代码是:

(defn register [email password]
  (try
    (let [reg (.createUserWithEmailAndPassword (.auth firebase) email password)
          _ (.log js/console reg)]
       reg)
      (catch :default e
        (.log js/console "Register Error:" e))))

正如我所怀疑的那样,它没有被捕获的原因是评估可能会在稍后发生,这是为了测试这个想法。

我也试过:

(defn register [email password]
  (try
    (.createUserWithEmailAndPassword (.auth firebase) email password)
      (catch :default e
        (.log js/console "Register Error:" e))))

我这样称呼:

(apply register ((juxt :email :password) @app-state))

如果我向它传递一封我已经注册过的电子邮件,我会收到预期的 auth/email-already-in-use 错误,但我无法捕捉到它。

www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyDzsfz98Y6Pjl1n-uAzfI6GHWKqShFdRI4:1
POST https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=AIzaSyDzsfz98Y6Pjl1n-uAzfI6GHWKqShFdRI4 400 ()

firebase.inc.js:81
Uncaught
  Qcode: "auth/email-already-in-use"
  message: "The email address is already in use by another account."
  __proto__: Error
(anonymous) @ firebase.inc.js:81

如何捕捉它?或者是使用原始 javascript?

处理此问题的唯一方法
firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

Firebase 身份验证是异步的。 Javascript 的(通常是 Clojurescript 的)try...catch 在回调中不起作用。使用错误回调调用 Firebase 处理程序提供的 catch 函数,就像这样 - 这是上面 post 中 JS 代码的字面翻译:

(defn register [email password]
  (.. firebase auth (createUserWithEmailAndPassword email password)
      (catch (fn [e] (.log js/console "Register Error:" e))))