Future.wait()未捕获异常(飞镖)

问题描述 投票:0回答:1

在我的Flutter应用中,我想同时进行多个网络调用,然后在它们全部完成后执行一些操作。为此,我使用Future.wait(),它可以执行我想要的操作。但是,当调用失败时,它将引发异常,该异常在某种程度上没有被异常处理程序捕获(即未捕获的异常)。

[当我单独执行await _fetchSomeData()时(在Future.wait()外部),异常确实被异常处理程序调用了。

  Future<bool> someMethod() async {

    try {
      var results = await Future.wait([
        _fetchSomeData(),
        _fetchSomeOtherData()
      ]);
      //do some stuf when both have finished...
      return true;
    }
    on Exception catch(e) {
      //does not get triggered somehow...
      _handleError(e);
      return false;
    }
  } 

使用Future.wait()时需要做什么以捕获异常?

更新:

我已经缩小了范围。原来,如果您在Future.wait()调用的方法中使用另一个await语句,则会导致此问题。这里是一个例子:

  void _futureWaitTest() async {

    try {
      //await _someMethod(); //using this does not cause an uncaught exception, but the line below does
      await Future.wait([ _someMethod(), ]);
    }
    on Exception catch(e) {
      print(e);
    } 
  }

  Future<bool> _someMethod() async {
    await Future.delayed(Duration(seconds: 1), () => print('wait')); //removing this prevents the uncaught exception
    throw Exception('some exception');
  }

因此,如果您从_someMethod()中删除等待行,或者只是在_someMethod()之外调用Future.wait(),将防止未捕获的异常。当然这是最不幸的,我需要等待http调用... Dart中的一些错误?

exception flutter dart
1个回答
0
投票

[我认为您对Future.wait()的命名有点误导。 Future.wait()返回另一个future,当每个future成功完成时,每个future将返回List个元素。

现在,因为Future.wait()仍然是未来。您可以通过两种方式处理它:

  1. awaittry catch一起使用。
  2. 使用onError回调。

这将是类似的东西

Future.wait([futureOne, futureTwo])
.then((listOfValues) {
    print("ALL GOOD")
 }, 
 onError: (error) { print("Something is not ok") }
© www.soinside.com 2019 - 2024. All rights reserved.