void main() {
foo().catchError((error) {
print('Error caught = $error');
});
}
Future<void> foo() {
throw Future.error('FooError');
}
当我阅读docs时:
这是“捕获”块的异步等效项。
如果我使用catch
块,则会捕获到错误。但是我的catchError
无法捕获该错误,但是根据文档,它应该可以。我在做错什么吗?
注意:我知道我可以使用return
而不是throw
,然后如@CopsOnRoad here所述,错误将被捕获在catchError
中。我的问题是,为什么catchError
没有捕获到引发的错误,但是catch
块确实捕获了该错误。
答案 0 :(得分: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
,因此实际上返回了Future
可以捕获的catchError
。
拥有一个返回Future<void>
而没有被标记为async
并且不返回文字类型Future<void>
的函数确实应该是一个错误。