期货收益和catchError

时间:2019-04-16 09:00:51

标签: dart future

我想让主要功能显示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关于期货和错误处理。

0 个答案:

没有答案