1 | define(["./_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 | }); |
---|