我想让主要功能显示StateB,并且由于类型不匹配而没有“未捕获错误”。
我不确定为什么这不能按预期进行。
这是我的DartPad
中的代码import 'dart:async';
abstract class State {
String toString();
}
class StateA extends State {
@override
String toString() => 'StateA';
}
class StateB extends State {
@override
String toString() => 'StateB';
}
void main() async {
final result = await function1();
print("Result:" + result.toString()); // <<<< HERE IT MUST PRINT StateB
}
Future<State> function1() {
return Future(() => Future.value()) // some random task
.then((_) => function2())
.then((_) => StateA())
// .then((_) => Future<State>.value(StateA())) // COMMENT LINE ABOVE LINE AND SWITCH TO THIS ONE TO MAKE IT WORK AS EXPECTED
.catchError((error) {
return StateB();
// return Future<State>.value(StateB()); // COMMENT LINE ABOVE SWITCH TO THIS ONE TO MAKE IT WORK AS EXPECTED
});
}
Future<State> function2() {
// throw Exception("function2");
return Future.error(Exception("function2"));
}
我们重新抛出错误的方式也造成了棘手的情况。检查this了解更多信息。
我在实际上使其起作用的行上留下了一些其他注释。
也许我错过了一些东西,因为在dart的文档中很明显,它们只是返回值而不是带有值的未来。
Documentation关于期货和错误处理。