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