Skip to content

angular-hu/bower-retry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Publish repo for angular-hu-retry

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.

httpu.retry

Factory to create interceptors that retry the failed request based on some conditions

Installation

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

Usage

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'
  });
});

Use cases

  • You have several retry strategies based on some backend specific errors

LICENSE

The MIT License (MIT)

Copyright (c) 2015 Telefónica I+D - http://www.tid.es