2015-02-10 1 views
0

Я получаю доступ к 3 API и агрегирую их данные на своей странице. В случае сбоя одного из вызовов API (возможно, сайт отключен) выполнение останавливается, и страница не содержит никаких данных.Как бороться с вызовом API отказа с помощью AngularJS

Я хочу продолжать выполнять оставшиеся вызовы API и просто игнорировать тот, который терпел неудачу. Как я могу это сделать?

myApp.controller('homeController', function ($scope, $q, $http, $timeout) { 
    $scope.allTest = function() { 
     var first = $http.get('/api/drawings/'), 
      second = $http.get('/api/procedures/'), 
      third = $http.get('/api/sharepoint/'); 

     $q.all([first, second, third]).then(function (result) { 
      var tmp = []; 
      angular.forEach(result, function (response) { 
       tmp.push(response.data); 
      }); 
      return tmp; 
     }).then(function (result) { 
      $scope.combinedResult = result; // result in combinedResult 
     }); 
    }; 
}); 

ответ

1

Вам необходимы надлежащая обработка ошибок, которые, например, могут быть сделаны с помощью функции обратного вызова, так что

   $http.get('/api/drawings/').then(
        (response:ng.IHttpPromiseCallbackArg<any>) => { 
         success(response); 
        }, 
        (response:ng.IHttpPromiseCallbackArg<any>) => { 
         error(response); 
        } 
       ); 

Если успех - продолжить выполнение, в противном случае обработать ошибку.

+0

Я все еще хочу продолжить выполнение других 2 вызовов API и проигнорировать ошибку (игнорируя, я имею в виду молчаливый журнал или пытаюсь перезагрузить этот вызов API еще раз) – JeffC

+0

Encapuslate эти вызовы API в службах, поэтому вместо их прямого вызова контроллер, вызов через службу, где сбой будет обработан и зарегистрирован, как вы сказали. И, конечно, ваши следующие два звонка также должны иметь одинаковое обращение, чтобы вы могли их называть. Таким образом, это будет нечто «apiService.retrieveDrawings», «apiService.retrieveProcedures», «apiService.retrieveSharepoint», и каждый метод 'retrieve *' будет обрабатывать ошибки и регистрировать. – vtor

+0

Это было! Спасибо за руководство. Это получилось очень хорошо. Я благосклонно игнорирую автономные сообщения или ошибки в сервисе, которые иногда случаются, и все еще выводят данные на экран, который не имеет ошибок. – JeffC

Смежные вопросы