Flutter 为什么catchError不是';你不能抓住错误吗? void main(){ foo().catchError((错误){ 打印('Error capture=$Error'); }); } 未来的foo(){ 抛出Future.error('FooError'); }

Flutter 为什么catchError不是';你不能抓住错误吗? void main(){ foo().catchError((错误){ 打印('Error capture=$Error'); }); } 未来的foo(){ 抛出Future.error('FooError'); },flutter,dart,Flutter,Dart,当我读到这篇文章时: 这是“catch”块的异步等价物 如果使用catch块,则会捕获错误。但是我的catchError无法捕获错误,但根据文档,它应该能够捕获错误。我做错什么了吗 注意:我知道我可以使用return而不是throw,然后错误将被@CopsOnRoad声明的catchError捕获。我的问题是为什么catchError没有捕获抛出的错误,但是catch块确实捕获到了抛出的错误。foo()在它将未来返回给调用方之前抛出错误。因此,不是因为catchError不起作用,而是错误没有

当我读到这篇文章时:

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

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


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

foo()
在它将
未来
返回给调用方之前抛出错误。因此,不是因为
catchError
不起作用,而是错误没有传递回调用方

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

void main(){
foo().catchError((错误){
打印('Error capture=$Error');
});
}
Future foo()异步{
抛出Future.error('FooError');
}
您将从接受的答案中看到,它们的函数被标记为
async
,因此
Future
实际上返回了
catchError
可以捕获的
Future

如果函数返回的是
Future
,而没有标记为
async
,并且没有返回
Future
的文本类型,那么实际上应该是一个错误

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

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