dart - 在 Dart 中将异常从异步方法向上传递到同步方法

标签 dart error-handling try-catch

因此,来自 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/

相关文章:

php - PHP错误处理- “missing argument for errorHandler”

javascript - 如果外部文件不存在,文件将停止 : is possible to solve this?

php - catch 不工作

c# - try 没有捕获 WebException

flutter - 如何在 Dart 中将 RxInt 转换为 Int || flutter ?

flutter - 如何限制WebviewScaffold显示有限的内容

Flutter:谷歌地图检测摄像头处于移动/不移动状态

flutter - 如何在初始化抖动上创建make http请求

Java Filter 与错误调度程序解释

java - 从类内的多个方法捕获异常