| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.async; | 5 part of dart.async; |
| 6 | 6 |
| 7 deprecatedFutureValue(_FutureImpl future) => | 7 deprecatedFutureValue(_FutureImpl future) => |
| 8 future._isComplete ? future._resultOrListeners : null; | 8 future._isComplete ? future._resultOrListeners : null; |
| 9 | 9 |
| 10 | 10 |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 class _WhenFuture<T> extends _TransformFuture<T, T> { | 413 class _WhenFuture<T> extends _TransformFuture<T, T> { |
| 414 final _FutureAction _action; | 414 final _FutureAction _action; |
| 415 | 415 |
| 416 _WhenFuture(this._action); | 416 _WhenFuture(this._action); |
| 417 | 417 |
| 418 void _sendValue(T value) { | 418 void _sendValue(T value) { |
| 419 try { | 419 try { |
| 420 var result = _action(); | 420 var result = _action(); |
| 421 if (result is Future) { | 421 if (result is Future) { |
| 422 Future resultFuture = result; | 422 Future resultFuture = result; |
| 423 result.then((_) { | 423 resultFuture.then((_) { |
| 424 _setValue(value); | 424 _setValue(value); |
| 425 }, onError: (AsyncError e) { | 425 }, onError: _setError); |
| 426 _setError(e); | |
| 427 }); | |
| 428 return; | 426 return; |
| 429 } | 427 } |
| 430 } catch (e, s) { | 428 } catch (e, s) { |
| 431 _setError(new AsyncError(e, s)); | 429 _setError(new AsyncError(e, s)); |
| 432 return; | 430 return; |
| 433 } | 431 } |
| 432 |
| 434 _setValue(value); | 433 _setValue(value); |
| 435 } | 434 } |
| 436 | 435 |
| 437 void _sendError(AsyncError error) { | 436 void _sendError(AsyncError error) { |
| 438 try { | 437 try { |
| 439 var result = _action(); | 438 var result = _action(); |
| 440 if (result is Future) { | 439 if (result is Future) { |
| 441 Future resultFuture = result; | 440 Future resultFuture = result; |
| 442 result.then((_) { | 441 // TODO(lrn): Find a way to combine [error] into [e]. |
| 442 resultFuture.then((_) { |
| 443 _setError(error); | 443 _setError(error); |
| 444 }, onError: (AsyncError e) { | 444 }, onError: _setError); |
| 445 // TODO(lrn): Find a way to combine error into the | |
| 446 // resulting error. | |
| 447 _setError(e); | |
| 448 }); | |
| 449 return; | 445 return; |
| 450 } | 446 } |
| 451 } catch (e, s) { | 447 } catch (e, s) { |
| 452 error = new AsyncError.withCause(e, s, error); | 448 error = new AsyncError.withCause(e, s, error); |
| 453 } | 449 } |
| 454 _setError(error); | 450 _setError(error); |
| 455 } | 451 } |
| 456 } | 452 } |
| 457 | 453 |
| 458 /** | 454 /** |
| 459 * Thin wrapper around a [Future]. | 455 * Thin wrapper around a [Future]. |
| 460 * | 456 * |
| 461 * This is used to return a "new" [Future] that effectively work just | 457 * This is used to return a "new" [Future] that effectively work just |
| 462 * as an existing [Future], without making this discoverable by comparing | 458 * as an existing [Future], without making this discoverable by comparing |
| 463 * identities. | 459 * identities. |
| 464 */ | 460 */ |
| 465 class _FutureWrapper<T> implements Future<T> { | 461 class _FutureWrapper<T> implements Future<T> { |
| 466 final Future<T> _future; | 462 final Future<T> _future; |
| 467 | 463 |
| 468 _FutureWrapper(this._future); | 464 _FutureWrapper(this._future); |
| 469 | 465 |
| 470 Future then(function(T value), { onError(AsyncError error) }) { | 466 Future then(function(T value), { onError(AsyncError error) }) { |
| 471 return _future.then(function, onError: onError); | 467 return _future.then(function, onError: onError); |
| 472 } | 468 } |
| 473 | 469 |
| 474 Future catchError(function(AsyncError error), {bool test(var error)}) { | 470 Future catchError(function(AsyncError error), {bool test(var error)}) { |
| 475 return _future.catchError(function, test: test); | 471 return _future.catchError(function, test: test); |
| 476 } | 472 } |
| 477 | 473 |
| 478 Future whenComplete(action()) { | 474 Future<T> whenComplete(action()) { |
| 479 return _future.whenComplete(action); | 475 return _future.whenComplete(action); |
| 480 } | 476 } |
| 481 | 477 |
| 482 Stream<T> asStream() => new Stream.fromFuture(this); | 478 Stream<T> asStream() => new Stream.fromFuture(_future); |
| 483 } | 479 } |
| OLD | NEW |