Этот код выбирает категории и передает их контроллеру.
sampleApp.factory('SCService', function($http, $q) {
var SuperCategories = [];
var SCService = {};
SCService.GetSuperCategories = function() {
var req = {
method: 'POST',
url: SuperCategoryURL,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: "action=GET"
};
if ( SuperCategories.length == 0 ) {
return $http(req).then(function (response) {
SuperCategories = response.data;
return SuperCategories;
});
}else {
return $q.when(SuperCategories);
}
}
return SCService;
});
Я думаю, что код идеален, пока в HTTP-запросе не будет ошибки.
Мой запрос заключается в том, как выполнять обработку ошибок (try catch или что-то в этом роде), в случае, если у сервера есть какая-то проблема или может быть cgi-скрипт, есть проблема и не может запросить сервер.
Угловые обещания используют метод catch
для этого.
return $http(req).then(function (response) {
SuperCategories = response.data;
return SuperCategories;
}).catch(function(error) {
// Do what you want here
});
Вы должны использовать также, finally
:
return $http(req).then(function (response) {
SuperCategories = response.data;
return SuperCategories;
}).catch(function(error) {
// Do what you want here
}).finally(function() {
// Always executed. Clean up variables, call a callback, etc...
});
Напишите как
return $http(req).then(function (response) {
//success callback
},
function(){
//Failure callback
});
Вы можете использовать методы.success и.error службы $ http, как показано ниже
$http(req).success(function(data, status, headers){
// success callback: Enters if status = 200
}).error(function(status, headers){
// error callback: enters otherwise
});
Использовать методы обратного вызова с контроллера.
Controller.js
service.GetSuperCategories(function (data) {console.log('success'},function (error){console.log('error'});
service.js
sampleApp.factory('SCService', function($http, $q) {
var SuperCategories = [];
var SCService = {};
SCService.GetSuperCategories = function(successMethod,errorMethod) {
var req = {
method: 'POST',
url: SuperCategoryURL,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: "action=GET"
};
return $http(req).then(successMethod(data),
errorMethod(error));
}
return SCService;
});
try {} cath(...) {}
будет другое поведение с$exceptionHandler
. Прочитайте эту статью: medium.com/@bluepnume/…