]> git.wh0rd.org - tt-rss.git/blame - lib/dojo/DeferredList.js.uncompressed.js
update dojo to 1.7.3
[tt-rss.git] / lib / dojo / DeferredList.js.uncompressed.js
CommitLineData
1354d172
AD
1define("dojo/DeferredList", ["./_base/kernel", "./_base/Deferred", "./_base/array"], function(dojo, Deferred, darray) {
2 // module:
3 // dojo/DeferredList
4 // summary:
5 // TODOC
6
7
8dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
9 // summary:
10 // Provides event handling for a group of Deferred objects.
11 // description:
12 // DeferredList takes an array of existing deferreds and returns a new deferred of its own
13 // this new deferred will typically have its callback fired when all of the deferreds in
14 // the given list have fired their own deferreds. The parameters `fireOnOneCallback` and
15 // fireOnOneErrback, will fire before all the deferreds as appropriate
16 //
17 // list:
18 // The list of deferreds to be synchronizied with this DeferredList
19 // fireOnOneCallback:
20 // Will cause the DeferredLists callback to be fired as soon as any
21 // of the deferreds in its list have been fired instead of waiting until
22 // the entire list has finished
23 // fireonOneErrback:
24 // Will cause the errback to fire upon any of the deferreds errback
25 // canceller:
26 // A deferred canceller function, see dojo.Deferred
27 var resultList = [];
28 Deferred.call(this);
29 var self = this;
30 if(list.length === 0 && !fireOnOneCallback){
31 this.resolve([0, []]);
32 }
33 var finished = 0;
34 darray.forEach(list, function(item, i){
35 item.then(function(result){
36 if(fireOnOneCallback){
37 self.resolve([i, result]);
38 }else{
39 addResult(true, result);
40 }
41 },function(error){
42 if(fireOnOneErrback){
43 self.reject(error);
44 }else{
45 addResult(false, error);
46 }
47 if(consumeErrors){
48 return null;
49 }
50 throw error;
51 });
52 function addResult(succeeded, result){
53 resultList[i] = [succeeded, result];
54 finished++;
55 if(finished === list.length){
56 self.resolve(resultList);
57 }
58
59 }
60 });
61};
62dojo.DeferredList.prototype = new Deferred();
63
64dojo.DeferredList.prototype.gatherResults = function(deferredList){
65 // summary:
66 // Gathers the results of the deferreds for packaging
67 // as the parameters to the Deferred Lists' callback
68 // deferredList: dojo.DeferredList
69 // The deferred list from which this function gathers results.
70 // returns: dojo.DeferredList
71 // The newly created deferred list which packs results as
72 // parameters to its callback.
73
74 var d = new dojo.DeferredList(deferredList, false, true, false);
75 d.addCallback(function(results){
76 var ret = [];
77 darray.forEach(results, function(result){
78 ret.push(result[1]);
79 });
80 return ret;
81 });
82 return d;
83};
84
85return dojo.DeferredList;
86});