Angular Catch 方法不适用于 $http get 请求
Angular Catch method not working with $http get request
我正在尝试在处理来自 API 的错误时巧妙地管理来自控制器的服务函数调用。
但是,当我执行以下操作时,即使 API 返回 403 或 404,我的控制台中仍然会显示 this is showing even with 403 and 404 errors
。
我假设如果我在我的服务文件中添加 catch
这可能会起作用,但我更愿意将其从控制器管理。这可能吗?
控制器:
angular.module('EnterDataCtrl', []).controller('EnterDataController', ['$scope', 'Data', '$state', function ($scope, Data, $state) {
vm = this;
vm.getRules = function (e, rule_query, data) {
if (e.keyCode == 13) {
Data.getRules(rule_query,data).then(function (data) {
console.log('this is showing even with 403 and 404 errors');
}).catch(function(res) {
console.log(res);
});
}
}
}]);
服务:
angular.module('EnterDataService', []).factory('Data', ['$http', function ($http) {
return {
getRules: function getRules(rule_query,data) {
var apiBase = apiUrl + 'get-rules';
var config = {
handleError:true,
params: {
rule_query: rule_query,
data : data
}
};
return $http.get(apiBase, config).catch(function () {});
}
}
}]);
在您的服务中,您是在设置捕获器而不做任何事情。这通常是不好的做法,如果您要使用 catch 块,则在那里处理错误。如果不是,则根本不要声明捕获。
您可以从服务方法中完全删除 catch,这应该会导致控制器的 catch 处理它。
或者,您可以将 catch 留在服务调用中,并确保抛出错误以正确冒出错误。
当拒绝处理程序省略 throw
语句时,它 returns undefined
。这 将被拒绝的 promise 转换为 undefined
。
已实现的 promise
为避免意外转换,在拒绝处理程序中包含 throw
语句很重要。
app.service('Data', ['$http', function ($http) {
this.getRules = function getRules(rule_query,data) {
var apiBase = apiUrl + 'get-rules';
var config = {
handleError:true,
params: {
rule_query: rule_query,
data : data
}
};
//return $http.get(apiBase, config).catch(function () {});
return $http.get(apiBase, config)
.catch(function (errorResponse) {
console.error("Data service error");
//IMPORTANT
throw errorResponse;
});
}
}]);
我正在尝试在处理来自 API 的错误时巧妙地管理来自控制器的服务函数调用。
但是,当我执行以下操作时,即使 API 返回 403 或 404,我的控制台中仍然会显示 this is showing even with 403 and 404 errors
。
我假设如果我在我的服务文件中添加 catch
这可能会起作用,但我更愿意将其从控制器管理。这可能吗?
控制器:
angular.module('EnterDataCtrl', []).controller('EnterDataController', ['$scope', 'Data', '$state', function ($scope, Data, $state) {
vm = this;
vm.getRules = function (e, rule_query, data) {
if (e.keyCode == 13) {
Data.getRules(rule_query,data).then(function (data) {
console.log('this is showing even with 403 and 404 errors');
}).catch(function(res) {
console.log(res);
});
}
}
}]);
服务:
angular.module('EnterDataService', []).factory('Data', ['$http', function ($http) {
return {
getRules: function getRules(rule_query,data) {
var apiBase = apiUrl + 'get-rules';
var config = {
handleError:true,
params: {
rule_query: rule_query,
data : data
}
};
return $http.get(apiBase, config).catch(function () {});
}
}
}]);
在您的服务中,您是在设置捕获器而不做任何事情。这通常是不好的做法,如果您要使用 catch 块,则在那里处理错误。如果不是,则根本不要声明捕获。
您可以从服务方法中完全删除 catch,这应该会导致控制器的 catch 处理它。
或者,您可以将 catch 留在服务调用中,并确保抛出错误以正确冒出错误。
当拒绝处理程序省略 throw
语句时,它 returns undefined
。这 将被拒绝的 promise 转换为 undefined
。
为避免意外转换,在拒绝处理程序中包含 throw
语句很重要。
app.service('Data', ['$http', function ($http) {
this.getRules = function getRules(rule_query,data) {
var apiBase = apiUrl + 'get-rules';
var config = {
handleError:true,
params: {
rule_query: rule_query,
data : data
}
};
//return $http.get(apiBase, config).catch(function () {});
return $http.get(apiBase, config)
.catch(function (errorResponse) {
console.error("Data service error");
//IMPORTANT
throw errorResponse;
});
}
}]);