jellyfin-web/dashboard-ui/thirdparty/apiclient/deferredAlt.js

101 lines
2.6 KiB
JavaScript
Raw Normal View History

(function (globalScope) {
globalScope.Deferred = {
Deferred: function () {
var self = this;
var done = [];
var fail = [];
var always = [];
var isOk = false;
var isDone = false;
var resolveScope;
var resolveArgs;
self.promise = function () {
return this;
};
self.done = function (fn) {
if (isDone && isOk) {
fn.apply(resolveScope || {}, resolveArgs);
}
else {
done.push(fn);
}
return self;
};
self.fail = function (fn) {
if (isDone && !isOk) {
fn.apply(resolveScope || {}, resolveArgs);
}
else {
fail.push(fn);
}
return self;
};
self.always = function (fn) {
if (isDone) {
fn.apply(resolveScope || {}, resolveArgs);
}
else {
always.push(fn);
}
return self;
};
self.resolveWith = function (scope, args) {
resolveScope = scope;
resolveArgs = args;
isOk = true;
isDone = true;
self.trigger();
};
self.rejectWith = function (scope, args) {
resolveScope = scope;
resolveArgs = args;
isOk = true;
isDone = true;
self.trigger();
};
self.trigger = function () {
var i, length;
if (isOk) {
var doneClone = done.splice(0);
for (i = 0, length = doneClone.length; i < length; i++) {
doneClone[i].apply(resolveScope || {}, resolveArgs);
}
}
else {
var failClone = fail.splice(0);
for (i = 0, length = failClone.length; i < length; i++) {
failClone[i].apply(resolveScope || {}, resolveArgs);
}
}
var alwaysClone = fail.splice(0);
for (i = 0, length = alwaysClone.length; i < length; i++) {
alwaysClone[i].apply(resolveScope || {}, resolveArgs);
}
};
return this;
},
when: function(promises) {
}
};
})(window);