【问题标题】:Why catchError isn't able to catch the error?为什么 catchError 无法捕获错误?
【发布时间】:2020-08-24 12:02:53
【问题描述】:
void main() {
  foo().catchError((error) {
    print('Error caught = $error');
  });
}

Future<void> foo() {
  throw Future.error('FooError');
}

当我阅读docs

这是“catch”块的异步等价物。

如果我使用catch 块,则会捕获错误。但我的catchError 无法捕捉到错误,但根据文档应该。我是不是做错了什么?


注意:我知道我可以使用return 而不是throw,然后@CopsOnRoad here 所述错误将在catchError 中捕获。我的问题是为什么 catchError 没有捕捉到抛出的错误,但 catch 块确实捕捉到了。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    foo() 在将Future 返回给调用者之前会引发错误。所以不是catchError 不起作用,只是错误没有传递回调用者。

    如果您将foo 标记为async,以便函数实际返回Future,您将看到错误已被捕获。

    void main() {
      foo().catchError((error) {
        print('Error caught = $error');
      });
    }
    
    Future<void> foo() async {
      throw Future.error('FooError');
    }
    

    您会从您的linked post 接受的答案中看到,他们的函数被标记为async,因此实际上返回了FuturecatchError 可以捕获。

    有一个函数返回 Future&lt;void&gt; 而没有标记为 async 并且不返回 Future&lt;void&gt; 的文字类型确实应该是一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2021-03-21
      • 1970-01-01
      相关资源
      最近更新 更多