Как отобразить ошибку тайм-аута в angular js $http-вызовах?

Я делаю вызов ajax, используя $http в angular js. Я использовал тайм-аут в нем. Но я хочу показать пользователю сообщение об ошибке, если время соединения заканчивается. Ниже приведен код.

$http({
            method: 'POST',
            url: 'Link to be called',
            data: $.param({ 
                    key:Apikey,
                    id:cpnId
                }),
            timeout : 5000, 
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).success(function(result){
               alert(result);
            }).error(function(data){
              alert(data);
            });

Есть ли способ, чтобы я мог отображать пользователя, если время соединения завершено. Есть ли способ, чтобы его можно было настроить в одном месте?

Ответ 1

И если вы хотите сделать что-то, когда время соединения завершено для каждого запроса, вы можете использовать перехватчики (глобальный параметр таймаута не работает):

// loading for each http request
app.config(function ($httpProvider) {
    $httpProvider.interceptors.push(function ($rootScope, $q) {
        return {
            request: function (config) {
                config.timeout = 1000;
                return config;
            },
            responseError: function (rejection) {
                switch (rejection.status){
                    case 408 :
                        console.log('connection timed out');
                        break;
                }
                return $q.reject(rejection);
            }
        }
    })
})

Ответ 3

Для достижения этой цели вы можете использовать перехватчик angular.

$httpProvider.responseInterceptors
.push(['$q', '$injector','$rootScope', function ( $q, $injector,$rootScope) {
 return function (promise) {
    return promise.then(function (response) {
        return response;
    }, function (response) {
        console.log(response); // response status
        return $q.reject(response);
    });
  };
 }]);
}]);

Подробнее см. эту ссылку

Ответ 4

Вам просто нужно проверить статус ответа и что он:

}).error(function(data, status, header, config) {
      if (status === 408) {
          console.log("Error - " + status + ", Response Timeout.");
      } 

});

Для глобального HTTP-тайм-аута ознакомьтесь с этим ответом