[483] | 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 | }); |
---|