在 Dart 中将异常从异步方法向上传递到同步方法
Posted
技术标签:
【中文标题】在 Dart 中将异常从异步方法向上传递到同步方法【英文标题】:Passing Exceptions up the stack in Dart from async to sync methods 【发布时间】:2019-05-17 23:20:25 【问题描述】:因此,来自 javascript 世界,我可以处理无论在堆栈深处抛出的异常。在 Dart 中做同样的事情是行不通的。我不确定如何向上传递异常,以便在堆栈的根部进行处理。
willThrow() async
throw Exception('Im an exception');
init() async
final illNeverExist = await willThrow();
print(illNeverExist);
main()
try
init();
catch(err)
print(err);
^^^ 这完全适用于 javascript。
在“init”中,即使我将其包装在 try catch 中并抛出该错误,我总是会得到一个未捕获的异常。
init() async
try
final illNeverExist = await willThrow();
print(illNeverExist);
catch(err)
throw err
如何在 dart 中将异步异常向上传递?!
【问题讨论】:
你需要制作main
async
并使用await init();
(或直接使用Future.catchError
)。
你是对的!那行得通。 b的儿子。谢谢!如果这是一个答案,我会这样标记它!
【参考方案1】:
main
函数中的 try
-catch
块不会等待异步 init
函数完成。因此,当init
完成时,将不再捕获其异常。
你可以通过main
async
和await init();
来解决这个问题,或者你可以使用Future.catchError
直接在返回的Future
上注册一个错误回调。
【讨论】:
以上是关于在 Dart 中将异常从异步方法向上传递到同步方法的主要内容,如果未能解决你的问题,请参考以下文章
Dart 中的 stdout.write() 显然已从同步更改为异步,但我该如何使用它呢?
FlutterFuture 异步编程 ( 简介 | then 方法 | 异常捕获 | asyncawait 关键字 | whenComplete 方法 | timeout 方法 )