我有一些async
过程,它们调用了另外一个async
过程。我有一个main
程序,它等待上述程序返回的所有期货完成。完成后,我将继续其他工作。示例:
// Somewhere in widget
void init() async {
await mainInitProc()
}
Future<void> mainInitProc() async {
try {
final result = await Future.wait([
initProc_1();
initProc_2();
]);
} on SomeException catch(e) {
// As I send error in each initProc_x to stream to display it
// I need do nothing except `return`
return;
}
}
Future<void> initProc_1() async {
try {
final result = await getData_1();
// work with result
} on SomeException catch(e) {
_initSubject(e.toString());
rethrow;
}
}
Future<void> initProc_2() async {
try {
final result = await getData_2();
// work with result
} on SomeException catch(e) {
_initSubject(e.toString());
rethrow;
}
}
问题是initProc_N
中没有捕获到mainInitProc
中的异常。我的意思是我的VS Code
停在rethrow
的行中,并以红色矩形显示错误消息(作为未处理的异常)。请帮助我找出我做错了什么?
我当然可以使用以下代码代替Future.wait
:
await initProc_1();
await initProc_2();
但是功能速度至少降低了2倍,因此Future.wait
至关重要。