JSFiddle - React, Tailwind, and code Playground

HTML

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<p id="test">Hello</p>

JavaScript

var retried = function (done, duration, start) {
  if (!_.isNumber(start)) start = +(new Date());
  return done()
  .then(function (dat) {
    return dat;
  }, function (err) {
    var stop = +(new Date());
    if (duration > stop - start) return retried(done, duration, start);
    return err;
  });
};

$(function () {

  var $el = $('#test');

  function api (message) {
    return $.ajax('/echo/json/', {
      method: 'POST',
      data: { json: JSON.stringify({ message: message }), delay: 6000 },
      timeout: 1000
    });
  }
  
  retried(_.bind(api, undefined, 'Hello, world.'), 3000)
  .then(function (dat) {
    $el.css('color', '').text(dat.message);
  }, function (jqXHR) {
    $el.css('color', 'red').text(jqXHR.statusText);
  });

});