notAChance
notAChance

Reputation: 1430

How to detect all http GET fails?

In my application I have a grid which fetches data via HTTP promises. At the moment I can detect errorCallbacks - as below:

myDataPromise.then(function () {
    //do stuff
}, function errorCallback(response) {
        if (response.statusText === "Not Found") {
            //do stuff
        }else if(response.statusText === "Internal Server Error"){
            //do stuff
        }

but say for an SSL error, where chrome fires back "ERR::CONNECTION REFUSED" I cannot pick up on this by reading the string as I can with 404's etc. Really what I want is to display a simple image/text stating that there has been an error in retrieving one's data no matter what it is. So if a http GET fails at all - the user knows. This seems to me like a fairly typical spec but I can't find much online regarding it.

Upvotes: 0

Views: 91

Answers (1)

com2ghz
com2ghz

Reputation: 2876

You have to create a interceptor

 // register the interceptor as a service
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
  return {
    // optional method
    'request': function(config) {
      // do something on success
      return config;
    },

    // optional method
   'requestError': function(rejection) {
      // do something on error
      if (canRecover(rejection)) {
        return responseOrNewPromise
      }
      return $q.reject(rejection);
    },



    // optional method
    'response': function(response) {
      // do something on success
      return response;
    },

    // optional method
   'responseError': function(rejection) {
      // do something on error
      if (canRecover(rejection)) {
        return responseOrNewPromise
      }
      return $q.reject(rejection);
    }
  };
});

$httpProvider.interceptors.push('myHttpInterceptor');


// alternatively, register the interceptor via an anonymous factory
$httpProvider.interceptors.push(function($q, dependency1, dependency2) {
  return {
   'request': function(config) {
       // same as above
    },

    'response': function(response) {
       // same as above
    }
  };
});

The interceptor intercepts all the $http traffic. Even when you are loading templates.

Upvotes: 3

Related Questions