Chromium Code Reviews| 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 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 297 static Future<List<T>> wait<T>(Iterable<Future<T>> futures, | 297 static Future<List<T>> wait<T>(Iterable<Future<T>> futures, |
| 298 {bool eagerError: false, | 298 {bool eagerError: false, |
| 299 void cleanUp(T successValue)}) { | 299 void cleanUp(T successValue)}) { |
| 300 final _Future<List<T>> result = new _Future<List<T>>(); | 300 final _Future<List<T>> result = new _Future<List<T>>(); |
| 301 List<T> values; // Collects the values. Set to null on error. | 301 List<T> values; // Collects the values. Set to null on error. |
| 302 int remaining = 0; // How many futures are we waiting for. | 302 int remaining = 0; // How many futures are we waiting for. |
| 303 var error; // The first error from a future. | 303 var error; // The first error from a future. |
| 304 StackTrace stackTrace; // The stackTrace that came with the error. | 304 StackTrace stackTrace; // The stackTrace that came with the error. |
| 305 | 305 |
| 306 // Handle an error from any of the futures. | 306 // Handle an error from any of the futures. |
| 307 void handleError(theError, theStackTrace) { | 307 handleError(theError, theStackTrace) { |
|
floitsch
2017/02/28 19:04:35
This looks like a temporary problem.
The 'then' i
Jennifer Messerly
2017/02/28 19:23:31
sounds great! I'll add that TODO, does this look g
| |
| 308 remaining--; | 308 remaining--; |
| 309 if (values != null) { | 309 if (values != null) { |
| 310 if (cleanUp != null) { | 310 if (cleanUp != null) { |
| 311 for (var value in values) { | 311 for (var value in values) { |
| 312 if (value != null) { | 312 if (value != null) { |
| 313 // Ensure errors from cleanUp are uncaught. | 313 // Ensure errors from cleanUp are uncaught. |
| 314 new Future.sync(() { cleanUp(value); }); | 314 new Future.sync(() { cleanUp(value); }); |
| 315 } | 315 } |
| 316 } | 316 } |
| 317 } | 317 } |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 820 if (replacement != null) { | 820 if (replacement != null) { |
| 821 error = _nonNullError(replacement.error); | 821 error = _nonNullError(replacement.error); |
| 822 stackTrace = replacement.stackTrace; | 822 stackTrace = replacement.stackTrace; |
| 823 } | 823 } |
| 824 result._completeError(error, stackTrace); | 824 result._completeError(error, stackTrace); |
| 825 } | 825 } |
| 826 | 826 |
| 827 /** Helper function that converts `null` to a [NullThrownError]. */ | 827 /** Helper function that converts `null` to a [NullThrownError]. */ |
| 828 Object _nonNullError(Object error) => | 828 Object _nonNullError(Object error) => |
| 829 (error != null) ? error : new NullThrownError(); | 829 (error != null) ? error : new NullThrownError(); |
| OLD | NEW |