如果我有以下代码:
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死了什么?或者哪个期货仍然存在?
通过运行来确定打印的内容非常简单(你没有方便的Dart VM吗?):
a c AsyncError: 'Error!'
等待所有给定的期货完成并收集它们的价值.
返回一个列表中的所有期货完成后将完成的未来.如果列表中的任何期货以错误结束,则生成的未来也会因错误而完成.否则,返回的future的值将是生成的所有值的列表.
e.error是('Error!'在这种情况下)创建的值,因此通过将其设置为指示哪个Future有错误的内容,您可以看到哪个Future"已死".当然,如果您不是创建错误的那个,那也无济于事.
一般情况下,我认为你Future.wait()在类似的List中使用它们时,任何一个中的错误都会被类似地处理.需要知道哪一个失败可能是一个迹象表明你不希望wait()他们在一起.
更新:我刚刚意识到问题标题是问问题机构没有问的问题:其他期货会发生什么?
其他期货继续运行.wait()投掷返回时收到的任何错误都会返回,因此所有返回值都会丢失,如果任何其他Futures抛出错误,则不会被捕获,但每个Future仍会运行直到返回或抛出错误.
| 归档时间: |
|
| 查看次数: |
1331 次 |
| 最近记录: |