blob: 3b604ae0e6cba2797ff7b27fee784b209e64436b [file] [log] [blame]
(function(exports) {
/**
* resolveRace returns a promise that resolves when the first promise
* resolves and rejects only after every promise has rejected.
* @param {promise[]} promises a list of promises.
* @return {promse} a promise that resolves when any of the inputs resolve, or
* when all of the inputs reject.
*/
function resolveRace(promises) {
var resolve, reject;
var promise = new Promise(function(pResolve, pReject) {
resolve = pResolve;
reject = pReject;
});
var numRejects = 0;
for (var i in promises) {
promises[i].then(resolve, function(reason) {
numRejects++;
if (numRejects == promises.length) {
reject(reason);
}
});
}
return promise;
};
exports.resolveRace = resolveRace;
})(window);