| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 /** | 5 /** | 
| 6  * A [Future] is used to obtain a value sometime in the future.  Receivers of a | 6  * A [Future] is used to obtain a value sometime in the future.  Receivers of a | 
| 7  * [Future] can obtain the value by passing a callback to [then]. For example: | 7  * [Future] can obtain the value by passing a callback to [then]. For example: | 
| 8  * | 8  * | 
| 9  *     Future<int> future = getFutureFromSomewhere(); | 9  *     Future<int> future = getFutureFromSomewhere(); | 
| 10  *     future.then((value) { | 10  *     future.then((value) { | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 194    * returned future will be a list of all the values that were produced.) | 194    * returned future will be a list of all the values that were produced.) | 
| 195    */ | 195    */ | 
| 196   static Future<List> wait(List<Future> futures) { | 196   static Future<List> wait(List<Future> futures) { | 
| 197     if (futures.isEmpty()) { | 197     if (futures.isEmpty()) { | 
| 198       return new Future<List>.immediate(const []); | 198       return new Future<List>.immediate(const []); | 
| 199     } | 199     } | 
| 200 | 200 | 
| 201     Completer completer = new Completer<List>(); | 201     Completer completer = new Completer<List>(); | 
| 202     Future<List> result = completer.future; | 202     Future<List> result = completer.future; | 
| 203     int remaining = futures.length; | 203     int remaining = futures.length; | 
| 204     List<Object> values = new List(futures.length); | 204     List values = new List(futures.length); | 
| 205 | 205 | 
| 206     // As each future completes, put its value into the corresponding | 206     // As each future completes, put its value into the corresponding | 
| 207     // position in the list of values. | 207     // position in the list of values. | 
| 208     for (int i = 0; i < futures.length; i++) { | 208     for (int i = 0; i < futures.length; i++) { | 
| 209       // TODO(mattsh) - remove this after bug | 209       // TODO(mattsh) - remove this after bug | 
| 210       // http://code.google.com/p/dart/issues/detail?id=333 is fixed. | 210       // http://code.google.com/p/dart/issues/detail?id=333 is fixed. | 
| 211       int pos = i; | 211       int pos = i; | 
| 212       Future future = futures[pos]; | 212       Future future = futures[pos]; | 
| 213       future.then((Object value) { | 213       future.then((Object value) { | 
| 214         values[pos] = value; | 214         values[pos] = value; | 
| 215         if (--remaining == 0 && !result.isComplete) { | 215         if (--remaining == 0 && !result.isComplete) { | 
| 216           completer.complete(values); | 216           completer.complete(values); | 
| 217         } | 217         } | 
| 218       }); | 218       }); | 
| 219       future.handleException((exception) { | 219       future.handleException((exception) { | 
| 220         if (!result.isComplete) completer.completeException(exception); | 220         if (!result.isComplete) completer.completeException(exception); | 
| 221         return true; | 221         return true; | 
| 222       }); | 222       }); | 
| 223     } | 223     } | 
| 224     return result; | 224     return result; | 
| 225   } | 225   } | 
| 226 } | 226 } | 
| OLD | NEW | 
|---|