diff options
author | Andrew Dolgov <[email protected]> | 2013-03-18 10:26:24 +0400 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2013-03-18 10:26:26 +0400 |
commit | f0cfe83e3725f9a3928da97a6e3085e79cb25309 (patch) | |
tree | 4b0af188defaa807c7bc6ff3a101b41c9166c463 /lib/dojo/promise/all.js.uncompressed.js | |
parent | 9a2885da170ffd64358b99194095851a2d09c1b6 (diff) |
upgrade dojo to 1.8.3 (refs #570)
Diffstat (limited to 'lib/dojo/promise/all.js.uncompressed.js')
-rw-r--r-- | lib/dojo/promise/all.js.uncompressed.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/dojo/promise/all.js.uncompressed.js b/lib/dojo/promise/all.js.uncompressed.js new file mode 100644 index 000000000..278f604a6 --- /dev/null +++ b/lib/dojo/promise/all.js.uncompressed.js @@ -0,0 +1,76 @@ +define("dojo/promise/all", [ + "../_base/array", + "../Deferred", + "../when" +], function(array, Deferred, when){ + "use strict"; + + // module: + // dojo/promise/all + + var some = array.some; + + return function all(objectOrArray){ + // summary: + // Takes multiple promises and returns a new promise that is fulfilled + // when all promises have been fulfilled. + // description: + // Takes multiple promises and returns a new promise that is fulfilled + // when all promises have been fulfilled. If one of the promises is rejected, + // the returned promise is also rejected. Canceling the returned promise will + // *not* cancel any passed promises. + // objectOrArray: Object|Array? + // The promise will be fulfilled with a list of results if invoked with an + // array, or an object of results when passed an object (using the same + // keys). If passed neither an object or array it is resolved with an + // undefined value. + // returns: dojo/promise/Promise + + var object, array; + if(objectOrArray instanceof Array){ + array = objectOrArray; + }else if(objectOrArray && typeof objectOrArray === "object"){ + object = objectOrArray; + } + + var results; + var keyLookup = []; + if(object){ + array = []; + for(var key in object){ + if(Object.hasOwnProperty.call(object, key)){ + keyLookup.push(key); + array.push(object[key]); + } + } + results = {}; + }else if(array){ + results = []; + } + + if(!array || !array.length){ + return new Deferred().resolve(results); + } + + var deferred = new Deferred(); + deferred.promise.always(function(){ + results = keyLookup = null; + }); + var waiting = array.length; + some(array, function(valueOrPromise, index){ + if(!object){ + keyLookup.push(index); + } + when(valueOrPromise, function(value){ + if(!deferred.isFulfilled()){ + results[keyLookup[index]] = value; + if(--waiting === 0){ + deferred.resolve(results); + } + } + }, deferred.reject); + return deferred.isFulfilled(); + }); + return deferred.promise; // dojo/promise/Promise + }; +}); |