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 /// A type representing values that are either `Future<T>` or `T`. | 7 /// A type representing values that are either `Future<T>` or `T`. |
8 /// | 8 /// |
9 /// This class declaration is a public stand-in for an internal | 9 /// This class declaration is a public stand-in for an internal |
10 /// future-or-value generic type. References to this class are resolved to the | 10 /// future-or-value generic type. References to this class are resolved to the |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 * if (onError is ZoneBinaryCallback) { | 546 * if (onError is ZoneBinaryCallback) { |
547 * return onError(e, stackTrace); | 547 * return onError(e, stackTrace); |
548 * } | 548 * } |
549 * return onError(e); | 549 * return onError(e); |
550 * } | 550 * } |
551 * throw e; | 551 * throw e; |
552 * }); | 552 * }); |
553 * } | 553 * } |
554 * | 554 * |
555 */ | 555 */ |
556 // The `Function` below stands for one of two types: | 556 // The `Function` below can stand for several types: |
557 // - (dynamic) -> FutureOr<T> | 557 // - (dynamic) -> T |
558 // - (dynamic, StackTrace) -> FutureOr<T> | 558 // - (dynamic, StackTrace) -> T |
| 559 // - (dynamic) -> Future<T> |
| 560 // - (dynamic, StackTrace) -> Future<T> |
559 // Given that there is a `test` function that is usually used to do an | 561 // Given that there is a `test` function that is usually used to do an |
560 // `isCheck` we should also expect functions that take a specific argument. | 562 // `isCheck` we should also expect functions that take a specific argument. |
561 // Note: making `catchError` return a `Future<T>` in non-strong mode could be | 563 // Note: making `catchError` return a `Future<T>` in non-strong mode could be |
562 // a breaking change. | 564 // a breaking change. |
563 Future<T> catchError(Function onError, | 565 Future<T> catchError(Function onError, |
564 {bool test(Object error)}); | 566 {bool test(Object error)}); |
565 | 567 |
566 /** | 568 /** |
567 * Register a function to be called when this future completes. | 569 * Register a function to be called when this future completes. |
568 * | 570 * |
569 * The [action] function is called when this future completes, whether it | 571 * The [action] function is called when this future completes, whether it |
570 * does so with a value or with an error. | 572 * does so with a value or with an error. |
571 * | 573 * |
572 * This is the asynchronous equivalent of a "finally" block. | 574 * This is the asynchronous equivalent of a "finally" block. |
573 * | 575 * |
574 * The future returned by this call, `f`, will complete the same way | 576 * The future returned by this call, `f`, will complete the same way |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
776 * or a future of type `Future<T>`. | 778 * or a future of type `Future<T>`. |
777 * | 779 * |
778 * If the value is itself a future, the completer will wait for that future | 780 * If the value is itself a future, the completer will wait for that future |
779 * to complete, and complete with the same result, whether it is a success | 781 * to complete, and complete with the same result, whether it is a success |
780 * or an error. | 782 * or an error. |
781 * | 783 * |
782 * Calling `complete` or [completeError] must not be done more than once. | 784 * Calling `complete` or [completeError] must not be done more than once. |
783 * | 785 * |
784 * All listeners on the future are informed about the value. | 786 * All listeners on the future are informed about the value. |
785 */ | 787 */ |
786 void complete([FutureOr<T> value]); | 788 void complete([value]); |
787 | 789 |
788 /** | 790 /** |
789 * Complete [future] with an error. | 791 * Complete [future] with an error. |
790 * | 792 * |
791 * Calling [complete] or `completeError` must not be done more than once. | 793 * Calling [complete] or `completeError` must not be done more than once. |
792 * | 794 * |
793 * Completing a future with an error indicates that an exception was thrown | 795 * Completing a future with an error indicates that an exception was thrown |
794 * while trying to produce a value. | 796 * while trying to produce a value. |
795 * | 797 * |
796 * If [error] is `null`, it is replaced by a [NullThrownError]. | 798 * If [error] is `null`, it is replaced by a [NullThrownError]. |
(...skipping 21 matching lines...) Expand all Loading... |
818 void _completeWithErrorCallback(_Future result, error, stackTrace) { | 820 void _completeWithErrorCallback(_Future result, error, stackTrace) { |
819 AsyncError replacement = Zone.current.errorCallback(error, stackTrace); | 821 AsyncError replacement = Zone.current.errorCallback(error, stackTrace); |
820 if (replacement != null) { | 822 if (replacement != null) { |
821 error = _nonNullError(replacement.error); | 823 error = _nonNullError(replacement.error); |
822 stackTrace = replacement.stackTrace; | 824 stackTrace = replacement.stackTrace; |
823 } | 825 } |
824 result._completeError(error, stackTrace); | 826 result._completeError(error, stackTrace); |
825 } | 827 } |
826 | 828 |
827 /** Helper function that converts `null` to a [NullThrownError]. */ | 829 /** Helper function that converts `null` to a [NullThrownError]. */ |
828 Object _nonNullError(Object error) => error ?? new NullThrownError(); | 830 Object _nonNullError(Object error) => |
| 831 (error != null) ? error : new NullThrownError(); |
OLD | NEW |