Flutter 为什么catchError不是';你不能抓住错误吗? void main(){ foo().catchError((错误){ 打印('Error capture=$Error'); }); } 未来的foo(){ 抛出Future.error('FooError'); }
当我读到这篇文章时: 这是“catch”块的异步等价物 如果使用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
块,则会捕获错误。但是我的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');
}