Функция any
Функция any класса Future принимает
список фьючеров и возвращает новый Future,
который завершается успешно, как только первый
из переданных фьючеров завершится с результатом.
В первый параметр мы передаем список фьючеров
Iterable<Future<T>>, результат которых
нужно проверить. Если хотя бы один фьючер
завершится успешно, возвращаемый фьючер
завершится его значением. Если все фьючеры
завершатся с ошибкой, возвращаемый фьючер
завершится последней ошибкой.
Синтаксис
Future.any(futures)
Пример
Давайте создадим два фьючера с разной задержкой и проверим, какой из них завершится первым:
void main()
{
Future<String> first = Future.delayed(
Duration(seconds: 2), () => 'first'
);
Future<String> second = Future.delayed(
Duration(seconds: 1), () => 'second'
);
Future.any([first, second]).then((value) {
print(value);
});
}
Результат выполнения кода:
"second"
Пример
Давайте проверим, что произойдет, если один из фьючеров завершится с ошибкой, а другой успешно:
void main()
{
Future<String> success = Future.delayed(
Duration(seconds: 2), () => 'success'
);
Future<String> failure = Future.delayed(
Duration(seconds: 1),
() => throw Exception('error')
);
Future.any([success, failure]).then(
(value) => print(value),
onError: (error) => print('Error: $error')
);
}
Результат выполнения кода:
"success"
Пример
Давайте проверим поведение функции, когда все фьючеры завершаются с ошибкой:
void main()
{
Future<String> first = Future.delayed(
Duration(seconds: 1),
() => throw Exception('first error')
);
Future<String> second = Future.delayed(
Duration(seconds: 2),
() => throw Exception('second error')
);
Future.any([first, second]).then(
(value) => print(value),
onError: (error) => print('Error: $error')
);
}
Результат выполнения кода:
"Error: Exception: second error"