source: Dev/branches/rest-dojo-ui/client/dojo/DeferredList.js @ 274

Last change on this file since 274 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 2.6 KB
Line 
1define(["./_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});
Note: See TracBrowser for help on using the repository browser.