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/