Async/future Dart 中的错误处理未按预期工作

Async/future error handling in Dart not working as expected

我已经花了好几个小时研究 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;
}

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

Unhandled exception:

type '() => dynamic' is not a subtype of type '(dynamic) => dynamic' of 'f'.

因此你应该使用:

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

您没有收到任何分析器错误,因为参数是用 Function 键入的。您可以 file an issue 知道为什么类型不是更具体的类型匹配 (dynamic)=>dynamic