vtex.js
Version:
VTEX JS SDK
45 lines (41 loc) • 1.18 kB
JavaScript
(function() {
var AjaxQueue;
AjaxQueue = function(ajax) {
var theQueue;
theQueue = $({});
return function(ajaxOpts) {
var abortFunction, dfd, jqXHR, promise, requestFunction;
jqXHR = void 0;
dfd = $.Deferred();
promise = dfd.promise();
requestFunction = function(next) {
jqXHR = ajax(ajaxOpts);
if (jqXHR.retry) {
jqXHR.retry({
times: 2,
statusCodes: [500, 503]
});
}
return jqXHR.done(dfd.resolve).fail(dfd.reject).then(next, next);
};
abortFunction = function(statusText) {
var index, queue;
if (jqXHR) {
return jqXHR.abort(statusText);
} else {
queue = theQueue.queue();
index = [].indexOf.call(queue, requestFunction);
if (index > -1) {
queue.splice(index, 1);
}
dfd.rejectWith(ajaxOpts.context || ajaxOpts, [promise, statusText, ""]);
return promise;
}
};
theQueue.queue(requestFunction);
promise.abort = abortFunction;
return promise;
};
};
window.AjaxQueue = AjaxQueue;
}).call(this);