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