This repo is for distribution on bower
. The source for this module is in the
main angular-hu-retry repo.
Please file issues and pull requests against that repo.
Factory to create interceptors that retry the failed request based on some conditions
Get it from bower or directly download it.
bower install --save angular-hu-retry
Add the dependency in the HTML
<script type="text/javascript" src="bower_components/angular-hu-retry/retry.js"></script>
Add the httpu.retry
dependency to your App Module
angular.module('MyApp', ['httpu.retry']);
The huRetryInterceptorFactory
dependency is now available
angular.module('MyApp')
.run(function($http) {
//retry 3 times before giving up. (the original request + 3 retries = 4 request)
$http.get('http://myapi.com/things', {
retries: 3
});
})
//SIMPLE USAGE: retry everything
.config(function($httpProvider) {
// Add a default interceptor instantiation
$httpProvider.interceptors.push(['huRetryInterceptorFactory', function(huRetryInterceptorFactory) {
return huRetryInterceptorFactory();
}]);
})
//MEDIUM USAGE: Retry with a 503 error.
.config(function($httpProvider) {
$httpProvider.interceptors.push('retryOn503Interceptor');
})
.factory('retryOn503Interceptor', function(huRetryInterceptorFactory, $q, $timeout) {
//return an interceptor that specifies the conditions for retry
return huRetryInterceptorFactory({
//this func will be called when there are remaining request. i.e. `retries` field in the request config
//is still greater than 0.
//So, it's called when a retry is about to be performed, allowing you to cancel the retry
// Useful when you don't want to retry a request based on some rejection parameters
// Must return a promise resolving to a boolean, allowing you to perform an async operation before retrying,
// or a boolean which means the desire of retrying
shouldRetry: function(rejection) {
//rejection is the paramter passed to https://docs.angularjs.org/api/ng/service/$http responseError interceptor
if (rejection.status === 503) {
//If my api response is a 503 error, retry the after 2 secs
return $timeout(function() {
return true;
}, 2000);
}
return false;
}
//There is also another one config parameter to the factory, called `retryField`
//that allows you to specify the name of field to be looked in the config to determine
// how many retries are remaining. Defaults to 'retries'
});
});
- You have several retry strategies based on some backend specific errors
The MIT License (MIT)
Copyright (c) 2015 Telefónica I+D - http://www.tid.es