Как сделать обработку ошибок при получении данных в сервисе angularjs

0

Этот код выбирает категории и передает их контроллеру.

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-скрипт, есть проблема и не может запросить сервер.

Теги:
controller
service

4 ответа

1

Угловые обещания используют метод 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...
});
  • 0
    Спасибо за ответ. Просто хотел понять, какой вариант хорош? Используя обратные вызовы try catch или success / error?
  • 0
    Имейте в виду, что у "классического" try {} cath(...) {} будет другое поведение с $exceptionHandler . Прочитайте эту статью: medium.com/@bluepnume/…
1

Напишите как

 return $http(req).then(function (response) {
               //success callback
            },
 function(){
//Failure callback
});
0

Вы можете использовать методы.success и.error службы $ http, как показано ниже

$http(req).success(function(data, status, headers){
    // success callback:  Enters if status = 200
}).error(function(status, headers){
    // error callback: enters otherwise
});
0

Использовать методы обратного вызова с контроллера.

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;
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню