在Dart中,如果我将Future.wait与Futures列表一起使用并且其中一个期货出现错误,那么其他期货会发生什么?

Jun*_*ont 4 dart

如果我有以下代码:

Future<int> a = new Future(() { print('a'); return 1; });
Future<int> b = new Future.error('Error!');
Future<int> c = new Future(() { print('c'); return 3; });

Future.wait([a, b, c])
  .then((List<int> values) => print(values))
  .catchError((e) => print(e));
Run Code Online (Sandbox Code Playgroud)

什么印刷?

陷入错误的是否catchError知道Future死了什么?或者哪个期货仍然存在?

Dar*_*tle 6

通过运行来确定打印的内容非常简单(你没有方便的Dart VM吗?):

a
c
AsyncError: 'Error!'

Future.wait()文档说:

等待所有给定的期货完成并收集它们的价值.

返回一个列表中的所有期货完成后将完成的未来.如果列表中的任何期货以错误结束,则生成的未来也会因错误而完成.否则,返回的future的值将是生成的所有值的列表.

e.error是('Error!'在这种情况下)创建的值,因此通过将其设置为指示哪个Future有错误的内容,您可以看到哪个Future"已死".当然,如果您不是创建错误的那个,那也无济于事.

一般情况下,我认为你Future.wait()在类似的List中使用它们时,任何一个中的错误都会被类似地处理.需要知道哪一个失败可能是一个迹象表明你不希望wait()他们在一起.

更新:我刚刚意识到问题标题是问问题机构没有问的问题:其他期货会发生什么?

其他期货继续运行.wait()投掷返回时收到的任何错误都会返回,因此所有返回值都会丢失,如果任何其他Futures抛出错误,则不会被捕获,但每个Future仍会运行直到返回或抛出错误.