gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:31:43 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com