New file |
0,0 → 1,75 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
dojo.require("dojo.Deferred"); |
dojo.provide("dojo.DeferredList"); |
dojo.DeferredList = function (list, fireOnOneCallback, fireOnOneErrback, consumeErrors, canceller) { |
this.list = list; |
this.resultList = new Array(this.list.length); |
this.chain = []; |
this.id = this._nextId(); |
this.fired = -1; |
this.paused = 0; |
this.results = [null, null]; |
this.canceller = canceller; |
this.silentlyCancelled = false; |
if (this.list.length === 0 && !fireOnOneCallback) { |
this.callback(this.resultList); |
} |
this.finishedCount = 0; |
this.fireOnOneCallback = fireOnOneCallback; |
this.fireOnOneErrback = fireOnOneErrback; |
this.consumeErrors = consumeErrors; |
var index = 0; |
var _this = this; |
dojo.lang.forEach(this.list, function (d) { |
var _index = index; |
d.addCallback(function (r) { |
_this._cbDeferred(_index, true, r); |
}); |
d.addErrback(function (r) { |
_this._cbDeferred(_index, false, r); |
}); |
index++; |
}); |
}; |
dojo.inherits(dojo.DeferredList, dojo.Deferred); |
dojo.lang.extend(dojo.DeferredList, {_cbDeferred:function (index, succeeded, result) { |
this.resultList[index] = [succeeded, result]; |
this.finishedCount += 1; |
if (this.fired !== 0) { |
if (succeeded && this.fireOnOneCallback) { |
this.callback([index, result]); |
} else { |
if (!succeeded && this.fireOnOneErrback) { |
this.errback(result); |
} else { |
if (this.finishedCount == this.list.length) { |
this.callback(this.resultList); |
} |
} |
} |
} |
if (!succeeded && this.consumeErrors) { |
result = null; |
} |
return result; |
}, gatherResults:function (deferredList) { |
var d = new dojo.DeferredList(deferredList, false, true, false); |
d.addCallback(function (results) { |
var ret = []; |
for (var i = 0; i < results.length; i++) { |
ret.push(results[i][1]); |
} |
return ret; |
}); |
return d; |
}}); |
|