在Dart中选择Future或waitAny?

时间:2015-12-07 04:08:21

标签: dart async-await future

我理解Future.wait会获取一份期货清单,并在清单中的所有期货完成后返回已完成的期货清单。

Dart中有没有办法阻止并等到列表中的任何未来完成而不是等待它们全部完成?

1 个答案:

答案 0 :(得分:3)

不是真的。我们可以添加Future.waitAny(现有的隐含waitAll)。

功能很简单:

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;
}

它确实忽略了所有其他期货的任何错误。另一方面,它也忽略了非错误结果,所以我觉得它很好。

当我们不再关心结果时,我们无法取消未来。