Angularjs 角度回报承诺,已经有一个捕获
我有一个angular服务,提供登录功能,以便登录用户:Angularjs 角度回报承诺,已经有一个捕获,angularjs,promise,Angularjs,Promise,我有一个angular服务,提供登录功能,以便登录用户: app.service('AuthSharedService', function($rootScope, $http, authService, UserSession) { this.login = function(email, password, rememberMe) { return $http.post('/login', { '
app.service('AuthSharedService', function($rootScope, $http, authService, UserSession) {
this.login = function(email, password, rememberMe) {
return $http.post('/login',
{
'email': email,
'password': password,
'rememberMe': rememberMe
})
.then(function(response){
console.log("success 1");
authService.loginConfirmed(response.data);
}).catch(function(response){
console.log("catch 1");
}).finally(function(response){
console.log("finally 1");
});
};
return this;
});
我还有一个绑定到HTML登录公式的控制器:
app.controller("loginController",
function ($scope, $rootScope, $window, $http, $routeParams, AuthSharedService){
var vm = this;
vm.email;
vm.password;
vm.rememberMe;
vm.login = function (){
AuthSharedService.login(vm.email, vm.password, vm.rememberMe)
.then(function(response){
console.log("success 2");
}).catch(function(response){
console.log("catch 2");
});
}
}
);
到目前为止,它是非常基本的。但是当我删除数据库用户表并尝试登录时,REST服务器上当然会出现内部错误500。但是angular的控制台输出是:
catch 1
success 2
但是为什么呢?我不能返回$http
以使用.then(function())
和.catch(function())
两次吗
感谢您的帮助:)问候您
catch
返回默认成功的新承诺;这允许您创建捕获错误的链,然后继续执行一些默认的成功场景:
returnsPromise()
.catch(() => 'default value')
.then(value => alert(value))
这将从returnsPromise
警告值,或者,如果失败,则警告默认值“默认值”
您要返回的是原始的$http
承诺,而不是捕获的承诺:
let p = $http.post(...);
p.catch(...);
return p;
如果
post()
失败,则如果发生错误,将调用已附加的catch
和您可能附加的任何其他错误处理程序。相反,只有当p
成功时,才会调用成功处理程序(而catch
不会)。catch
返回默认成功的新承诺;这允许您创建捕获错误的链,然后继续执行一些默认的成功场景:
returnsPromise()
.catch(() => 'default value')
.then(value => alert(value))
这将从returnsPromise
警告值,或者,如果失败,则警告默认值“默认值”
您要返回的是原始的$http
承诺,而不是捕获的承诺:
let p = $http.post(...);
p.catch(...);
return p;
如果
post()
失败,则如果发生错误,将调用已附加的catch
和您可能附加的任何其他错误处理程序。相反,只有当p
成功时,才会调用成功处理程序(而catch
不会)。当调用.catch
时,它会返回一个承诺。如果您不返回任何内容,它将返回自动解析的承诺
如果要在.catch
之后在错误状态下遵守承诺,可以执行以下操作:
promise
.catch(function(response) {
handleResponse(response);
return $q.reject(response);
});
您也可以这样做:
var promise = ...;
promise.catch(...);
return promise
但是请记住,如果
catch
回调是异步的,则此代码可能不会按您所希望的方式运行。当您调用.catch
时,它会返回一个承诺。如果您不返回任何内容,它将返回自动解析的承诺
如果要在.catch
之后在错误状态下遵守承诺,可以执行以下操作:
promise
.catch(function(response) {
handleResponse(response);
return $q.reject(response);
});
您也可以这样做:
var promise = ...;
promise.catch(...);
return promise
但是请记住,如果catch
回调是异步的,则此代码可能不会按您所希望的方式运行