| 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 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 * | 301 * |
| 302 * If `eagerError` is true, the returned future completes with an error | 302 * If `eagerError` is true, the returned future completes with an error |
| 303 * immediately on the first error from one of the futures. Otherwise all | 303 * immediately on the first error from one of the futures. Otherwise all |
| 304 * futures must complete before the returned future is completed (still with | 304 * futures must complete before the returned future is completed (still with |
| 305 * the first error; the remaining errors are silently dropped). | 305 * the first error; the remaining errors are silently dropped). |
| 306 * | 306 * |
| 307 * In the case of an error, [cleanUp] (if provided), is invoked on any | 307 * In the case of an error, [cleanUp] (if provided), is invoked on any |
| 308 * non-null result of successful futures. | 308 * non-null result of successful futures. |
| 309 * This makes it posible to `cleanUp` resources that would otherwise be | 309 * This makes it posible to `cleanUp` resources that would otherwise be |
| 310 * lost (since the returned future does not provide access to these values). | 310 * lost (since the returned future does not provide access to these values). |
| 311 * The [cleanup] function is unused if there is no error. | 311 * The [cleanUp] function is unused if there is no error. |
| 312 * | 312 * |
| 313 * The call to `cleanUp` should not throw. If it does, the error will be an | 313 * The call to `cleanUp` should not throw. If it does, the error will be an |
| 314 * uncaught asynchronous error. | 314 * uncaught asynchronous error. |
| 315 */ | 315 */ |
| 316 static Future<List<T>> wait<T>(Iterable<Future<T>> futures, | 316 static Future<List<T>> wait<T>(Iterable<Future<T>> futures, |
| 317 {bool eagerError: false, void cleanUp(T successValue)}) { | 317 {bool eagerError: false, void cleanUp(T successValue)}) { |
| 318 final _Future<List<T>> result = new _Future<List<T>>(); | 318 final _Future<List<T>> result = new _Future<List<T>>(); |
| 319 List<T> values; // Collects the values. Set to null on error. | 319 List<T> values; // Collects the values. Set to null on error. |
| 320 int remaining = 0; // How many futures are we waiting for. | 320 int remaining = 0; // How many futures are we waiting for. |
| 321 var error; // The first error from a future. | 321 var error; // The first error from a future. |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 887 AsyncError replacement = Zone.current.errorCallback(error, stackTrace); | 887 AsyncError replacement = Zone.current.errorCallback(error, stackTrace); |
| 888 if (replacement != null) { | 888 if (replacement != null) { |
| 889 error = _nonNullError(replacement.error); | 889 error = _nonNullError(replacement.error); |
| 890 stackTrace = replacement.stackTrace; | 890 stackTrace = replacement.stackTrace; |
| 891 } | 891 } |
| 892 result._asyncCompleteError(error, stackTrace); | 892 result._asyncCompleteError(error, stackTrace); |
| 893 } | 893 } |
| 894 | 894 |
| 895 /** Helper function that converts `null` to a [NullThrownError]. */ | 895 /** Helper function that converts `null` to a [NullThrownError]. */ |
| 896 Object _nonNullError(Object error) => error ?? new NullThrownError(); | 896 Object _nonNullError(Object error) => error ?? new NullThrownError(); |
| OLD | NEW |