any<T> method
Returns the result of the first future in futures
to complete.
The returned future is completed with the result of the first
future in futures
to report that it is complete,
whether it's with a value or an error.
The results of all the other futures are discarded.
If futures
is empty, or if none of its futures complete,
the returned future never completes.
Implementation
static Future<T> any<T>(Iterable<Future<T>> futures) {
var completer = new Completer<T>.sync();
var onValue = (T value) {
if (!completer.isCompleted) completer.complete(value);
};
var onError = (error, StackTrace stack) {
if (!completer.isCompleted) completer.completeError(error, stack);
};
for (var future in futures) {
future.then(onValue, onError: onError);
}
return completer.future;
}