【问题标题】:What is wrong with this Dart error handler?这个 Dart 错误处理程序有什么问题?
【发布时间】:2019-08-11 14:09:24
【问题描述】:

我正在 dart / flutter 中做一些(我认为的)基本异常处理。截至上周(2019 年 3 月 15 日),我正在使用最新版本的 dart 和 flutter。

这是我的代码:

void MyMethod() {
    Storage.getFilePaths().then((paths) {
      //do something
    }).catchError((Exception error) {
      //do something else
      return null;
    });
 }

但是,当运行程序并发生异常时,我在下面收到此消息并且看不到问题所在?

'无效参数(onError):错误处理程序必须接受一个对象或 一个 Object 和一个 StackTrace 作为参数,并返回一个有效的 结果:关闭:(异常)=> Null'

我想我错过了一些愚蠢的东西,并且很想知道那是什么。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:
    }).catchError((Exception error) {
    

    必须是

    }).catchError((Object error) {
    

    你不能在这里限制Exception。 Dart 可以抛出各种值。

    【讨论】:

    • 那我如何得到实际的错误呢?我需要访问抛出错误的字段。
    • 您可能需要像}).catchError((Object error) { if(error is MyError) print((error as MyError).someField; } 一样投射,但如果没有更多细节就很难分辨。也许值得提出一个完整但最少的复制的新问题。
    • 还可以考虑使用async/awaittry/catch 而不是catchErrorcatchError 可能很难做到正确。
    • 如果我没有提供错误的类型 (Object) 如果 err 没有预期的字段(有意义),Dart 不会抱怨但在执行期间会失败。我一回到我的地方就会尝试你建议的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多