因此,来自 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
函数中的 try
-catch
block 不会等待异步 init
函数执行完全的。因此,当 init
完成时,将不再捕获其异常。
您可以通过制作 main
async
并使用 await init();
来解决这个问题,或者您可以使用 Future.catchError
直接在返回的 Future
上注册错误回调。
关于dart - 在 Dart 中将异常从异步方法向上传递到同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56194668/