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

try/catch块不处理发生的错误

艾阳羽
2023-03-14

这个尝试捕获块似乎没有捕获发生的错误,这很奇怪,考虑到我对网站的注册部分有一个类似的尝试捕获块。这将处理登录。该错误发生在第三行电子邮件:$scope.authInfo.email 并引发此错误:

Error: Firebase.authWithPassword failed: First argument must contain the key "email" with type "string"

当电子邮件格式错误时会发生这种情况,例如test@。因此,当它是时,我希望在catch块中设置错误消息。

有人知道为什么这个< code>try catch不起作用吗?

try {
    $scope.syncAuth.$authWithPassword({
        email: $scope.authInfo.email,
        password: $scope.authInfo.password
    }).then(function(authData) {
        $scope.isSuccessful = true;
        $scope.success = 'You have successfully logged in - Redirecting...';
        $rootScope.loggedIn = true;
        $timeout($scope.redirectUser, 3000);
    }).catch(function(error) {

        switch (error.code) {

            case 'INVALID_USER': $scope.errors.push('The email you have entered is not a registered user.'); 
                                break;

            case 'INVALID_PASSWORD': $scope.errors.push('Invalid password.'); 
                                break;
        }
    });
}
catch (err) {
    $scope.errors.push('Invalid email format.')
}

共有1个答案

鲜于阳成
2023-03-14

在此处查看$auth Password方法的源代码。正如您所看到的,如果错误将被抛出-Firebase将返回被拒绝的promise。因此,您可以在promise捕获块中处理您的错误:

$scope.syncAuth.$authWithPassword({
    email: $scope.authInfo.email,
    password: $scope.authInfo.password
})
.catch(function(error) {
    switch (error.code) {
        case 'INVALID_USER': 
            $scope.errors.push('The email you have entered is not a registered user.');
            break;
        case 'INVALID_PASSWORD': 
            $scope.errors.push('Invalid password.');
            break;
        default:
            $scope.errors.push('Invalid email format.')
    }
    throw error;
})
.then(function(authData) {
    $scope.isSuccessful = true;
    $scope.success = 'You have successfully logged in - Redirecting...';
    $rootScope.loggedIn = true;
    $timeout($scope.redirectUser, 3000);
});
 类似资料:
  • 我们在SQL Server存储过程中使用以下错误处理模式: 但是当存储过程中出现以下错误时,try/catch块不起作用。 错误详细信息:存储过程试图将值插入非NULL列。 在执行存储过程中,我得到了以下错误 EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配。上一个计数=1,当前计数=0。 msg 3903, Level 16, State 1, Line 30 ROLLB

  • 不管你多么精通编程,有时我们的脚本总还是会出现错误。可能是因为我们的编写出错,或是与预期不同的用户输入,或是错误的服务端响应以及其他数千种原因。 通常,如果发生错误,脚本就会“死亡”(立即停止),并在控制台将错误打印出来。 但是有一种语法结构 try..catch,它使我们可以“捕获(catch)”错误,因此脚本可以执行更合理的操作,而不是死掉。 “try…catch” 语法 try..catch

  • 我正在尝试捕获caller方法中的IllegalAccessException。但它抓不到它。而是给出了一个错误。

  • 我需要在我的存储过程中添加错误处理。我相信当只有一个insert语句时,通常不需要使用BEGIN TRAN/COMMIT TRAN。还有使用SET XACT_ABORT,NOCOUNT ON语句的意义是什么。请给出最佳/标准的方法将错误处理添加到下面的SP中。如果出现错误,我还需要在catch段中调用dbo.usp_get_error_info。请建议。

  • 问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么

  • 问题内容: 在一个教程中,我发现 您的代码无法处理Unchecked Exception, 即我们不能使用块,示例是类似的异常,但是可以使用try / catch块处理这些异常。我认为我不清楚这个概念! 我也认为throw关键字只能与block.can一起使用吗? 问题答案: 已检查和未检查的异常之间的唯一区别是,必须使用捕获或在方法签名中声明 已 检查的异常,而对于未检查的异常,这是可选的。 您