在我的应用程序中我使用htto拦截器处理一般的http错误,当它更大或等于400时我得到状态代码,这意味着客户端或服务器端的错误我广播事件并且我在app上有处理程序。运行订阅事件, ,
问题是$ http.success一直在运行,我不能告诉角度停止继续控制器方法
下面是app的简化版本
拦截
angular.module('starter.Aop', [])
.factory('AuthInspector', ['$rootScope', '$injector', function AuthInspector($rootScope, $injector) {
var service = {
request: function (config) {
var authToken = window.localStorage.getItem('authToken')
config.headers.Authorization = 'Bearer ' + authToken;
return config
},
responseError: function (response) {
if (statusCode >= 400) {
$rootScope.$emit('someThingWrong')
event.preventDefault();
}
return response
}
};
return service;
}]);
app.run
.run(function ($timeout, $ionicPlatform, $rootScope, $state, $cordovaPushV5, $cordovaNetwork, $ionicPopup) {
$ionicPlatform.ready(function () {
$rootScope.$on('someThingWrong', function () {
console.log('someThingWrong')
event.preventDefault();
return;
})
控制器
$scope.logout = function () {
$http.post(serverConfig.serverUrl + "/api/account/logoutx").success(function (res) {
console.log('methode is successed')
//window.localStorage.removeItem('authToken');
//window.loclaStorage.removeItem('userFullName');
})
}
console.log('方法已成功')总是运行
如何从持续的控制器方法中停止角度?
答案 0 :(得分:2)
AuthInspector
转换拒绝成功。
要正确链接拒绝来自响应错误处理程序,请使用throw
语句或return $q.reject(error)
:
angular.module('starter.Aop', [])
.factory('AuthInspector', function AuthInspector($q,$rootScope) {
var service = {
request: function (config) {
var authToken = window.localStorage.getItem('authToken')
config.headers.Authorization = 'Bearer ' + authToken;
return config
},
responseError: function onReject(response) {
if (response.status >= 400) {
$rootScope.$emit('someThingWrong')
//event.preventDefault();
}
//return response;
throw response;
//OR
//return $q.reject(response);
}
};
return service;
});
将拒绝处理程序的响应转换拒绝成功。
另一个常见问题是拒绝处理程序忽略任何throw
或return
语句。在这种情况下,处理程序将undefined
返回给$q
服务;拒绝转换成功,后续成功处理程序以undefined
作为响应参数进行调用。