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
npm install ember-backoff --save
- Better tests using sinon
- Other strategies: simply retry, fibonacci...
- High level support for Ember Data and Ember Model
Pull requests are very welcome, thanks.
git clone
this repositorynpm install
bower install
ember server
- Visit your app at http://localhost:4200.
ember test
ember test --server