source: Dev/trunk/src/client/dojo/DeferredList.js @ 524

Last change on this file since 524 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.6 KB
Line 
1define(["./_base/kernel", "./_base/Deferred", "./_base/array"], function(dojo, Deferred, darray){
2        // module:
3        //              dojo/DeferredList
4
5
6dojo.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};
60dojo.DeferredList.prototype = new Deferred();
61
62dojo.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
83return dojo.DeferredList;
84});
Note: See TracBrowser for help on using the repository browser.