JSFiddle - React, Tailwind, and code Playground
by Yu I.
HTML
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<p id="test">Hello</p>
JavaScript
var promisify = function (func) {
var funcPartial = function () {
var funcArgs = _.toArray(arguments);
var dfr = new $.Deferred(), promiseArgs = [ dfr.resolve, dfr.reject ];
var timeoutId = setTimeout(function () {
clearTimeout(timeoutId);
func.apply(undefined, _.union(promiseArgs, funcArgs));
}, 1);
return dfr.promise();
};
return funcPartial;
};
retried = promisify(function (resolve, reject, done, duration, start) {
if (!_.isNumber(start)) start = +(new Date());
return done()
.then(resolve, function (err) {
var stop = +(new Date());
if (duration <= stop - start) {
reject(err);
} else {
return retried(done, duration, start);
}
});
});
$(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.text(dat.message);
}, function (err) {
if (err instanceof Error) $el.css('color', 'red');
$el.text(err.message);
});
});