我有这种身份验证服务,用于检查用户是否存储了会话。如果它通过返回$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()
答案 0 :(得分:4)
简单地回复被拒绝的承诺:
return $q.reject();
请注意,.error(...)
完全没用。
另请注意,由于您不会返回HTTP承诺,而是常规$ q承诺,因此调用方不应使用.success()
和.error()
。它应该拨打.then()
和.catch()
。