Angular response.status没有运行

时间:2016-11-24 18:53:21

标签: angularjs http

根据我的研究,看起来$ http拦截器已被弃用,所以我不确定目前的最佳做法是什么。如果用户尝试使用已经使用的用户名注册,我将返回409状态,并且我正尝试使用以下内容处理客户端:

$http.post('/register-user',payloadCredentials,config).then(function(response) {
            if (response.status == 409) {
                $scope.errorResponseUserName = "Username already exists.";
                $scope.error = true;
                clearPasswords();
                clearUsername();
            } else {
                $rootScope.authenticated = true;
                $location.path("/")
            }
        });

我还是Angular的新手,所以我不确定为什么如果状态代码中断它,这个函数似乎不会运行。我所看到的其他问题适用于过去使用.success().error()回调的Angular样式,但我没有找到使用较新.then()语法的任何情况。任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:1)

至于所有的承诺,那么()需要两个回调;一个在承诺得到解决时(即在成功的情况下)被召唤,一个被拒绝时(即在出现错误的情况下)。 409状态是错误。所以你(最有可能)需要

$http.post('/register-user',payloadCredentials,config).then(function(response) {
    $rootScope.authenticated = true;
    $location.path("/")
}, function(response) {
    $scope.errorResponseUserName = "Username already exists.";
    $scope.error = true;
    clearPasswords();
    clearUsername();
});

或者您也可以使用catch():

$http.post('/register-user',payloadCredentials,config).then(function(response) {
    $rootScope.authenticated = true;
    $location.path("/")
}).catch(function(response) {
    $scope.errorResponseUserName = "Username already exists.";
    $scope.error = true;
    clearPasswords();
    clearUsername();
});

我不确定你的拦截器被弃用了。 their documentation中没有提及弃用率。但无论如何,拦截器似乎不适合处理这种特定情况。