35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
(function ($) {
|
|
"use strict";
|
|
$.extend($.Deferred, {
|
|
queue: function () {
|
|
var queueDeferred = $.Deferred();
|
|
var promises = 0;
|
|
|
|
function resolve() {
|
|
if (--promises > 0) {
|
|
return;
|
|
}
|
|
setTimeout($.proxy(queueDeferred, 'resolve'), 0);
|
|
}
|
|
|
|
var promise = $.extend(queueDeferred.promise(), {
|
|
push: function () {
|
|
if (this.isResolved() || this.isRejected()) {
|
|
throw new Error("Can not add promises to a resolved "
|
|
+ "or rejected promise queue");
|
|
}
|
|
|
|
promises += 1;
|
|
$.when.apply(null, arguments).then(
|
|
resolve, $.proxy(queueDeferred, 'reject'));
|
|
return this;
|
|
}
|
|
});
|
|
if (arguments.length) {
|
|
promise.push.apply(promise, arguments);
|
|
}
|
|
return promise;
|
|
}
|
|
});
|
|
})(jQuery)
|