flutter - 为什么catchError无法捕获错误?

标签 flutter dart

void main() {
  foo().catchError((error) {
    print('Error caught = $error');
  });
}

Future<void> foo() {
  throw Future.error('FooError');
}
当我阅读docs时:

This is the asynchronous equivalent of a "catch" block.


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

注意:我知道我可以使用return代替throw,然后按照@CopsOnRoad here的说明将错误捕获在catchError中。我的问题是,为什么catchError没有捕获到引发的错误,但是catch块确实捕获了该错误。

最佳答案

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,因此实际上返回了Future可以捕获的catchError
拥有一个返回Future<void>而不被标记为async且不返回文字类型的Future<void>的函数确实应该是一个错误。

关于flutter - 为什么catchError无法捕获错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63560652/

相关文章:

regex - 使用 Dart 将 PascalCase 字符串分隔成单独的单词?

Flutter - 如何在 TabBarView 的主体内导航?

flutter - 如何修复 "minified:aq<void>"flutter web 错误

dart - Polymer 1.0 改变 Dart 对象自身的字段以反射(reflect)到 polymer

websocket - 如何使 websocket 流广播到许多其他页面?

dart - 当应用程序被卸载时,sharedpreferences 会发生什么变化?

flutter - 我无法将小部件居中放置

flutter - 如何在 Visual Studio Code 中录制屏幕?

dart - 数字大,精度损失

flutter - 如何为一个大图像制作动画以仅在屏幕内显示其自身的一部分?