首页 文章

Angular $ http承诺无法解决

提问于
浏览
1

我目前正致力于在AngularJS 1.3中构建登录流程 . 我的问题是从$ http调用返回的promise不会解析其'.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();
    });
}

我已经在问题所在的代码中添加了注释 . 我不知道为什么这段代码不起作用 . 从我对承诺的理解,然后'那么'应该解决无论回应是什么,错误的成功 .

我有一个拦截器运行,但我已经尝试禁用它而没有运气到最终结果 .

我错过了什么吗?

1 回答

  • 1

    如果您的登录(服务器端)返回HTTP错误代码(如401),则应解决错误,例如,传递给 then 的第二个函数 . 如果您没有't pass one it should bomb out; that'为什么要调用更高级别的错误函数 .

相关问题