Dart中的异步/未来错误处理未按预期工作

时间:2016-02-19 09:45:19

标签: dart dart-async

我在Dart页面上研究Futures and Error Handling部分已经好几个小时没有运气了。任何人都可以解释为什么下面的代码不打印All good

import 'dart:async';

main() async {
  try {
    await func1();
  } catch (e) {
    print('All good');
  }
}

Future func1() {
  var completer = new Completer();
  func2().catchError(() => completer.completeError('Noo'));
  return completer.future;
}

Future func2() {
  var completer = new Completer();
  completer.completeError('Noo');
  return completer.future;
}

1 个答案:

答案 0 :(得分:3)

func1中,用作catchError参数的函数必须是关于错误的类型(dynamic) => dynamic的子类型:

  

未处理的例外:

     

type'()=>动态'不是类型的子类型'(动态)=>动态' ' f'。

因此你应该使用:

Future func1() {
  var completer = new Completer();
  func2().catchError((e) => completer.completeError('Noo'));
  return completer.future;
}

您不会收到任何分析器错误,因为参数是使用Function键入的。您可以file an issue了解该类型不是更符合(dynamic)=>dynamic

的特定类型的原因