Skip to content

Instantly share code, notes, and snippets.

@stephenplusplus
Created February 19, 2014 18:51
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stephenplusplus/9098921 to your computer and use it in GitHub Desktop.
Save stephenplusplus/9098921 to your computer and use it in GitHub Desktop.
Angular API re-attempt
angular
.module('app')
.config(function ($httpProvider) {
$httpProvider.interceptors.push(['$injector', '$q', function ($injector, $q) {
return {
responseError: function (rejection) {
var $http = $injector.get('$http'),
$state = $injector.get('$state'),
MAX_RETRY_ATTEMPTS = 2,
request = rejection.config,
response = rejection.data,
retryDefer = $q.defer(),
retryRequest;
// A required API request failed.
if (request.__required) {
request.__retries = (request.__retries || 0) + 1;
// Keep trying.
if (request.__retries <= MAX_RETRY_ATTEMPTS) {
retryRequest = $http(request)
.success(function () {
retryDefer.resolve(retryRequest);
});
}
// Last attempt.
if (request.__retries > MAX_RETRY_ATTEMPTS) {
if (response && response.message) {
console.error(response.message);
}
$state.go('error');
retryDefer.reject(rejection);
}
return retryDefer.promise;
}
return $q.reject(rejection);
}
};
});
@stephenplusplus
Copy link
Author

Worth noting. I'm still a promise noob.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment