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