Use promises to track completion of decoding.

This commit is contained in:
Brendan Dahl 2011-12-11 16:56:45 -08:00
parent 7d1cddf371
commit 683f64d54f
3 changed files with 75 additions and 46 deletions

View file

@ -217,7 +217,33 @@ var Promise = (function promise() {
}
this.callbacks = [];
};
/**
* Builds a promise that is resolved when all the passed in promises are
* resolved.
* @param Array promises
* @return Promise
*/
Promise.all = function(promises) {
var deferred = new Promise();
var unresolved = promises.length;
var results = [];
if (unresolved === 0) {
deferred.resolve(results);
return deferred;
}
for (var i = 0; i < unresolved; ++i) {
var promise = promises[i];
promise.then((function(i) {
return function(value) {
results[i] = value;
unresolved--;
if (unresolved === 0)
deferred.resolve(results);
};
})(i));
}
return deferred;
};
Promise.prototype = {
hasData: false,