角度$http承诺无法解决

Angular $http promise not resolving

本文关键字:解决 承诺 http 角度      更新时间:2023-09-26

我目前正在AngularJS 1.3中构建登录流程。 我的问题是$http调用返回的承诺没有解析其".then"中的代码。

我正在努力处理从服务器返回的错误消息,特别是处理用户输入错误的用户名或密码时返回的任何 401 错误。 但是,当返回 401 时,.then 永远不会自行解析,并且其中的代码永远不会运行。

相关代码如下:

登录

表单的控制器作为其作用域上的登录函数,如下所示:

$scope.login = function() {
    $scope.authError = null;
    // Try to login
    var promise = session.login($scope.user);
    promise.then(function(loggedIn) {
        // THIS CODE NEVER RUNS
        if ( !loggedIn ) {
            $scope.authError = localizedMessages.get('login.error.invalidCredentials');
        }
    }, function(x) {
        $scope.authError = localizedMessages.get('login.error.serverError', { exception: x });
    });
};

我有一个会话工厂,负责登录和其他基于会话的需求。 登录代码为:

login: function(credentials) {
    var $http = $injector.get('$http');
    var url = ENV.apiEndpoint + "/sessions";
    var newSession = $http.post(url, credentials);
    return newSession.then(function(data) {
        session.set(data.token);
        //THIS CODE ONLY RUNS ON A SUCCESS RESPONSE
        if(session.isAuthenticated()) {
            closeLoginModal(true);
        }
        return session.isAuthenticated();
    });
}

我已经在问题所在的代码中放置了注释。我不知道为什么这段代码不起作用。 根据我对承诺的理解,那么"然后"应该解决无论回应是什么,成功都是错误的。

我有一个拦截器正在运行,但我尝试禁用它,但没有运气最终结果。

我错过了什么吗?

如果您的登录名(服务器端(返回 HTTP 错误代码,例如 401,这应该解析为错误,例如,传递给 then 的第二个函数。如果你不通过一个,它应该会爆炸;这就是调用更高级别的错误函数的原因。