Changeset 548
- Timestamp:
- 01/22/06 05:31:35 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
mochikit/branches/scriptaculous/MochiKit/Async.js
r487 r548 355 355 } 356 356 }; 357 358 MochiKit.Async.DeferredList = function (list, /* optional */fireOnOneCallback, fireOnOneErrback, consumeErrors, canceller) { 359 this.list = list; 360 this.resultList = new Array(this.list.length); 361 362 // Deferred init 363 this.chain = []; 364 this.id = this._nextId(); 365 this.fired = -1; 366 this.paused = 0; 367 this.results = [null, null]; 368 this.canceller = canceller; 369 this.silentlyCancelled = false; 370 371 if (this.list.length == 0 && !fireOnOneCallback) { 372 this.callback(this.resultList); 373 } 374 375 this.finishedCount = 0 376 this.fireOnOneCallback = fireOnOneCallback; 377 this.fireOnOneErrback = fireOnOneErrback; 378 this.consumeErrors = consumeErrors; 379 380 var index = 0; 381 MochiKit.Base.map(MochiKit.Base.bind(function (d) { 382 d.addCallback(MochiKit.Base.bind(this._cbDeferred, this), index, true); 383 d.addErrback(MochiKit.Base.bind(this._cbDeferred, this), index, false); 384 index += 1; 385 }, this), this.list); 386 }; 387 388 MochiKit.Base.update(MochiKit.Async.DeferredList.prototype, 389 MochiKit.Async.Deferred.prototype); 390 391 MochiKit.Base.update(MochiKit.Async.DeferredList.prototype, { 392 _cbDeferred: function (index, succeeded, result) { 393 this.resultList[index] = [succeeded, result]; 394 this.finishedCount += 1; 395 if (this.fired != 0) { 396 if (succeeded && this.fireOnOneCallback) { 397 this.callback([index, result]); 398 } else if (!succeeded && this.fireOnOneErrback) { 399 this.errback(result); 400 } else if (this.finishedCount == this.list.length) { 401 this.callback(this.resultList); 402 } 403 } 404 if (!succeeded && this.consumeErrors) { 405 result = null; 406 } 407 return result; 408 } 409 }); 357 410 358 411 MochiKit.Base.update(MochiKit.Async, { … … 621 674 "XMLHttpRequestError", 622 675 "Deferred", 676 "DeferredList", 623 677 "succeed", 624 678 "fail", mochikit/branches/scriptaculous/tests/test_MochiKit-Async.html
r399 r548 13 13 14 14 // Counting the number of tests is really lame 15 plan({'tests': 3 5});15 plan({'tests': 39}); 16 16 17 17 var increment = function (res) { … … 163 163 ok(e instanceof AlreadyCalledError, "non-swallowed cancel"); 164 164 } 165 166 /* 167 Test DeferredList 168 */ 169 170 var callList = new Array(3); 171 callList[0] = new Deferred(); 172 callList[1] = new Deferred(); 173 callList[2] = new Deferred(); 174 callList[0].addCallback(increment); 175 callList[1].addCallback(increment); 176 callList[2].addCallback(increment); 177 var defList = new DeferredList(callList); 178 callList[0].callback(3); 179 callList[1].callback(5); 180 callList[2].callback(4); 181 182 defList.addCallback(function (lst) { 183 is( arrayEqual(lst, [[true, 4], [true, 6], [true, 5]]), 1, 184 "deferredlist result ok" ); 185 }); 186 187 /* 188 Test fireOnOneCallback 189 */ 190 191 var callList2 = new Array(3); 192 callList2[0] = new Deferred(); 193 callList2[1] = new Deferred(); 194 callList2[2] = new Deferred(); 195 callList2[0].addCallback(increment); 196 callList2[1].addCallback(increment); 197 callList2[2].addCallback(increment); 198 var defList2 = new DeferredList(callList2, true); 199 callList2[1].callback(5); 200 callList2[0].callback(3); 201 callList2[2].callback(4); 202 203 defList2.addCallback(function (lst) { 204 is( arrayEqual(lst, [1, 6]), 1, "deferredlist fireOnOneCallback ok" ); 205 }); 206 207 /* 208 Test fireOnOneErrback 209 */ 210 211 var callList3 = new Array(3); 212 callList3[0] = new Deferred(); 213 callList3[1] = new Deferred(); 214 callList3[2] = new Deferred(); 215 callList3[0].addCallback(increment); 216 callList3[1].addCallback(throwStuff); 217 callList3[2].addCallback(increment); 218 var defList3 = new DeferredList(callList3, false, true); 219 callList3[0].callback(3); 220 callList3[1].callback("foo"); 221 callList3[2].callback(4); 222 223 defList3.addErrback(function (err) { 224 is( err.message, "foo", "deferredlist fireOnOneErrback ok" ); 225 }); 226 227 /* 228 Test consumeErrors 229 */ 230 231 var callList4 = new Array(3); 232 callList4[0] = new Deferred(); 233 callList4[1] = new Deferred(); 234 callList4[2] = new Deferred(); 235 callList4[0].addCallback(increment); 236 callList4[1].addCallback(throwStuff); 237 callList4[2].addCallback(increment); 238 var defList4 = new DeferredList(callList4, false, false, true); 239 defList4.addErrback(neverHappen); 240 callList4[1].addCallback(function (arg) { 241 is(arg, null, "deferredlist consumeErrors ok" ); 242 }); 243 callList4[0].callback(3); 244 callList4[1].callback("foo"); 245 callList4[2].callback(4); 246 165 247 166 248 /*
