当前位置: 首页 > 知识库问答 >
问题:

在Firebase Auth CreateUser上尝试捕获不工作

甄坚白
2023-03-14

我在每个if()语句之前以及createUserBackEailAndPassword函数之前调用了try捕获,捕获永远不会工作,错误确实会发生。也通过从Firebase文档中复制代码,而且它也不起作用。

我做错了什么?我想抓住'auth/email-已经在使用'的错误代码(和任何其他)。

我添加了没有try-catch的代码。

btnInitialRegister.addEventListener('click', (e) => {
load(strRegisterForm);
hideInitial();
const registerForm = document.querySelector('#registerForm');
const btnRegisterUser = registerForm.querySelector('#userRegisterBtn');
btnRegisterUser.addEventListener('click', e => {
    const registerEmail = registerForm.querySelector('#registerEmail');
    const registerPassword = registerForm.querySelector('#registerPassword');
    const verifyPassword = registerForm.querySelector('#verifyPassword');
    e.preventDefault();
    if (registerPassword.value.length >= 6) {
        if (registerPassword.value == verifyPassword.value) {
                auth.createUserWithEmailAndPassword(registerEmail.value,registerPassword.value)
                .then(userCredential => {
                        authUser = userCredential.user.uid;
                        auth.signOut()
                        console.log('logged out');
                        if (authUser) {
                            setTimeout(function(){registerForm.querySelector('#response').innerHTML += 'Usuario creado con exito. Estas siendo redirigido.'}, 5000);
                            load(strSignInForm);
                        }
                    }) 
                    
        } else {
            registerForm.querySelector('#response').innerHTML = 'Las contraseñas no coinciden.'
        }
    } else {
        registerForm.querySelector('#response').innerHTML += 'Las contraseñas deben tener un minimo de 6 caracteres.'
    }
})

});

共有2个答案

衡翰藻
2023-03-14

只是解释一下为什么要添加。catch()对您有效。

您需要捕获使用抛出的错误。catch()或使用try catch块的catch块。catch块包含一些语句,这些语句指定在try块中引发异常时要执行的操作。

如果您没有显式捕获异常,那么它将中止正在运行的进程,其余代码将不会执行。

乔伯寅
2023-03-14

我想通了!我结束了这个问题。在. so语句后添加了以下内容。

                    .catch(function (error) {
                    var errorCode = error.code;
                    var errorMessage = error.message;
                    if (errorCode == 'auth/email-already-in-use') {
                        document.querySelector('#response').innerHTML = 'El email ya esta siendo utilizado.'
                    } else {
                        document.querySelector('#response').innerHTML = errorMessage;
                    }
                })
 类似资料:
  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 问题内容: 我经常遇到如下情况: 仍然需要尝试-最终在内部捕获块。 克服此问题的最佳实践是什么? 问题答案: 写一个类,其中包含捕获和记录此类异常的方法,然后根据需要使用。 您最终会看到如下内容: 您的客户端代码将类似于: 更新: 自Java 7开始,各种JDBC接口都得到了扩展,而以上代码回答了原始问题,如果您直接针对JDBC API编写代码,则现在可以对其进行结构化:

  • 在 中,尝试捕获最终阻止的工作原理是什么? 所以如果有例外,我知道它会跳到捕获块,然后跳到最后的块。 但是如果没有错误,catch块不会运行,但是finally块会运行吗?

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 问题内容: 是否可以在中使用Try-Catch ? 问题答案: 不,这是不可能的。 这仅来自Sql Server 2005 检查TRY … CATCH(Transact-SQL)并检查 其他版本