Commit ccfee38f by Samuel Padgett

Add PromiseUtils.waitForAll

Add a utility that always waits for all promises, even if one fails.
(`$q.all` returns immediately when one fails.)
parent e4484f32
......@@ -3272,6 +3272,60 @@ angular.module('openshiftCommonServices')
});
;'use strict';
angular.module('openshiftCommonServices')
.factory('PromiseUtils', function($q) {
return {
// Returns a promise that is resolved or rejected only after all promises
// complete. `promises` is a collection of promises. `null` or
// `undefined` values are treated as "complete."
//
// Different than `$q.all` in that it will always wait for all promises.
// `$q.all` short circuits as soon as one fails.
//
// Also unlike `$q.all`, this method does not return any values when
// resolving or reasons when rejecting the promise.
waitForAll: function(promises) {
var total = _.size(promises);
if (!total) {
return $q.when();
}
var deferred = $q.defer();
var complete = 0;
var failed = false;
var checkDone = function() {
if (complete < total) {
return;
}
if (failed) {
deferred.reject();
} else {
deferred.resolve();
}
};
_.each(promises, function(promise) {
if (!promise) {
complete++;
checkDone();
return;
}
promise.catch(function() {
failed = true;
}).finally(function() {
complete++;
checkDone();
});
});
return deferred.promise;
}
};
});
;'use strict';
angular.module("openshiftCommonServices")
.service("RecentlyViewedProjectsService", function($filter){
......
......@@ -5296,6 +5296,60 @@ angular.module('openshiftCommonServices')
}]);
;'use strict';
angular.module('openshiftCommonServices')
.factory('PromiseUtils', ["$q", function($q) {
return {
// Returns a promise that is resolved or rejected only after all promises
// complete. `promises` is a collection of promises. `null` or
// `undefined` values are treated as "complete."
//
// Different than `$q.all` in that it will always wait for all promises.
// `$q.all` short circuits as soon as one fails.
//
// Also unlike `$q.all`, this method does not return any values when
// resolving or reasons when rejecting the promise.
waitForAll: function(promises) {
var total = _.size(promises);
if (!total) {
return $q.when();
}
var deferred = $q.defer();
var complete = 0;
var failed = false;
var checkDone = function() {
if (complete < total) {
return;
}
if (failed) {
deferred.reject();
} else {
deferred.resolve();
}
};
_.each(promises, function(promise) {
if (!promise) {
complete++;
checkDone();
return;
}
promise.catch(function() {
failed = true;
}).finally(function() {
complete++;
checkDone();
});
});
return deferred.promise;
}
};
}]);
;'use strict';
angular.module("openshiftCommonServices")
.service("RecentlyViewedProjectsService", ["$filter", function($filter){
......
......@@ -2343,6 +2343,23 @@ return cachedProjectData && cachedProjectData.update(project, "DELETED"), delete
});
}
};
} ]), angular.module("openshiftCommonServices").factory("PromiseUtils", [ "$q", function($q) {
return {
waitForAll:function(promises) {
var total = _.size(promises);
if (!total) return $q.when();
var deferred = $q.defer(), complete = 0, failed = !1, checkDone = function() {
total > complete || (failed ? deferred.reject() :deferred.resolve());
};
return _.each(promises, function(promise) {
return promise ? void promise["catch"](function() {
failed = !0;
})["finally"](function() {
complete++, checkDone();
}) :(complete++, void checkDone());
}), deferred.promise;
}
};
} ]), angular.module("openshiftCommonServices").service("RecentlyViewedProjectsService", [ "$filter", function($filter) {
var recentlyViewedProjsKey = "openshift/recently-viewed-project-uids", getProjectUIDs = function() {
var recentlyViewed = localStorage.getItem(recentlyViewedProjsKey);
......
'use strict';
angular.module('openshiftCommonServices')
.factory('PromiseUtils', function($q) {
return {
// Returns a promise that is resolved or rejected only after all promises
// complete. `promises` is a collection of promises. `null` or
// `undefined` values are treated as "complete."
//
// Different than `$q.all` in that it will always wait for all promises.
// `$q.all` short circuits as soon as one fails.
//
// Also unlike `$q.all`, this method does not return any values when
// resolving or reasons when rejecting the promise.
waitForAll: function(promises) {
var total = _.size(promises);
if (!total) {
return $q.when();
}
var deferred = $q.defer();
var complete = 0;
var failed = false;
var checkDone = function() {
if (complete < total) {
return;
}
if (failed) {
deferred.reject();
} else {
deferred.resolve();
}
};
_.each(promises, function(promise) {
if (!promise) {
complete++;
checkDone();
return;
}
promise.catch(function() {
failed = true;
}).finally(function() {
complete++;
checkDone();
});
});
return deferred.promise;
}
};
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment