JSFiddle - React, Tailwind, and code Playground
by hughes
JavaScript
var fuzzPeriod = 1000; // ms
var backoffExponent = 1; // linear backoff
var maxTries = 10;
var retry = function (requestFn, failFn) {
var tryCount = 0;
var _retry = function () {
if (++tryCount > maxTries) {
return failFn();
}
var fuzz = Math.random() * fuzzPeriod; // ms
var backoff = Math.pow(tryCount, backoffExponent);
setTimeout(function () {
requestFn().fail(_retry);
}, fuzz * backoff);
};
return _retry;
};
var success = function () {
console.log('how did this succeed?');
};
var finalFail = function () {
console.log('gave up on retrying');
};
var makeRequest = function () {
return $.ajax('http://example.com').done(success);
};
makeRequest().fail(retry(makeRequest, finalFail));