]> git.wh0rd.org - tt-rss.git/blob - lib/dojo/promise/all.js.uncompressed.js
modify dojo rebuild script to remove uncompressed files
[tt-rss.git] / lib / dojo / promise / all.js.uncompressed.js
1 define("dojo/promise/all", [
2 "../_base/array",
3 "../Deferred",
4 "../when"
5 ], function(array, Deferred, when){
6 "use strict";
7
8 // module:
9 // dojo/promise/all
10
11 var some = array.some;
12
13 return function all(objectOrArray){
14 // summary:
15 // Takes multiple promises and returns a new promise that is fulfilled
16 // when all promises have been fulfilled.
17 // description:
18 // Takes multiple promises and returns a new promise that is fulfilled
19 // when all promises have been fulfilled. If one of the promises is rejected,
20 // the returned promise is also rejected. Canceling the returned promise will
21 // *not* cancel any passed promises.
22 // objectOrArray: Object|Array?
23 // The promise will be fulfilled with a list of results if invoked with an
24 // array, or an object of results when passed an object (using the same
25 // keys). If passed neither an object or array it is resolved with an
26 // undefined value.
27 // returns: dojo/promise/Promise
28
29 var object, array;
30 if(objectOrArray instanceof Array){
31 array = objectOrArray;
32 }else if(objectOrArray && typeof objectOrArray === "object"){
33 object = objectOrArray;
34 }
35
36 var results;
37 var keyLookup = [];
38 if(object){
39 array = [];
40 for(var key in object){
41 if(Object.hasOwnProperty.call(object, key)){
42 keyLookup.push(key);
43 array.push(object[key]);
44 }
45 }
46 results = {};
47 }else if(array){
48 results = [];
49 }
50
51 if(!array || !array.length){
52 return new Deferred().resolve(results);
53 }
54
55 var deferred = new Deferred();
56 deferred.promise.always(function(){
57 results = keyLookup = null;
58 });
59 var waiting = array.length;
60 some(array, function(valueOrPromise, index){
61 if(!object){
62 keyLookup.push(index);
63 }
64 when(valueOrPromise, function(value){
65 if(!deferred.isFulfilled()){
66 results[keyLookup[index]] = value;
67 if(--waiting === 0){
68 deferred.resolve(results);
69 }
70 }
71 }, deferred.reject);
72 return deferred.isFulfilled();
73 });
74 return deferred.promise; // dojo/promise/Promise
75 };
76 });