我在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;
}
答案 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