在AngularJS服务中返回错误

时间:2015-06-03 15:53:46

标签: angularjs

我有这种身份验证服务,用于检查用户是否存储了会话。如果它通过返回$http.post()来获取api中的信息:

authService.getUser = function () {
    if (!SessionService.get('Auth')) return null;

    $userId = SessionService.get('User');
    SessionService.set('Auth', false); // reset to false

    if ($userId == null) return null;


    return $http.get('/api/users/' + $userId)
        .success(function (res) {
            SessionService.set('Auth', true);
            return res;
        })
        .error(function () {
            return null;
        });
}

这就像下面这样称呼:

AuthenticationService.getUser()
    .success(function (res) {
        $scope.user = res;
        console.log(res);
    })
    .error(function () {
        Materialize.toast('You are not logged in!');
    });

但是当它没有存储会话时会失败,因为我返回null。

那么您如何更改return null触发error()

的服务?

1 个答案:

答案 0 :(得分:4)

简单地回复被拒绝的承诺:

return $q.reject();

请注意,.error(...)完全没用。

另请注意,由于您不会返回HTTP承诺,而是常规$ q承诺,因此调用方不应使用.success().error()。它应该拨打.then().catch()