如何正确捕获嵌套的异步/等待异常?

时间:2019-08-22 16:08:37

标签: exception flutter async-await future

我有一些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至关重要。

0 个答案:

没有答案