Выберите будущее или waitAny в Dart?
Я понимаю, что Future.wait
берет список фьючерсов и возвращает список завершенных фьючерсов, когда все фьючерсы в списке завершены.
Есть ли способ в Dart блокировать и ждать, пока любое будущее в списке не завершится, а не ждать, пока они все завершатся?
1 ответ:
Не совсем. Мы могли бы добавить a
Future.waitAny
(где существующий неявно awaitAll
).Функциональность проста:
Он действительно игнорирует любые ошибки на всех других фьючерсах. С другой стороны, он также игнорирует результаты без ошибок, так что я думаю, что это нормально. Нам не хватает способа отменить будущее, когда мы больше не заботимся о результате.Future waitAny(Iterable<Future> futures) { var completer = new Completer(); for (var f in futures) { f.then((v) { if (!completer.isCompleted) completer.complete(v); }, onError: (e, s) { if (!completer.isCompleted) completer.completeError(e, s); }); } return completer.future; }