GavinJoyce / ember-backoff

exponential backoff and retry for rsvp.js promises
MIT License
45 stars 6 forks source link

ember-backoff

Build Status

Simple exponential backoff strategy for Ember.js promises


import retryWithBackoff from 'ember-backoff/retry-with-backoff';

export default Em.Route.extend({
  model: function(params) {
    retryWithBackoff(function() {
      return this.store.find('user', 142857); //return any promise here
    }, 5, 100); //retry 5 times: 100ms, 200ms, 400ms, 800ms, 1600ms between tries
  }
});

Or using one of the supplied strategies


import retryWithBackoff from 'ember-backoff/retry-with-backoff';
import constant from 'ember-backoff/strategy/constant';

export default Em.Route.extend({
  model: function(params) {
    retryWithBackoff(function() {
      // poll until record exists
      return this.store.find('completedJob', 22);
    }, 10, 1000, constant); //retry 10 times: always 1s between tries
  }
});

Or you own custom strategy


import retryWithBackoff from 'ember-backoff/retry-with-backoff';
import exponential from 'ember-backoff/strategy/exponential';

function exponentialWithDither(initialWait, retryCount) {
  var ditherFrac = Math.random() * 10;
  return (1 + ditherFrac) * exponential(initialWait, retryCount);
}

export default Em.Route.extend({
  model: function(params) {
    retryWithBackoff(function() {
      return this.store.query('thunderindHerd');
    }, 10, 1000, exponentialWithDither);
  }
});

Questions? Ping me @gavinjoyce

Installation

npm install ember-backoff --save

Outstanding Tasks

Pull requests are very welcome, thanks.

Development Instructions

Running

sample application

Running Tests