何时在Dart中使用Future.handleexception以及何时尝试捕获

时间:2012-11-15 06:32:31

标签: dart

我正试图在Dart中真正获得Futures,我注意到我遇到的每个例子都使用handleException来处理完成Future的异常。然而,API文档声明“在大多数情况下,不需要调用handleException,因为如果将来的值被消耗,与此Future相关的异常将自然传播。如果需要执行一些特殊的本地异常处理,则只调用handleException这个特殊的未来的价值。“

那么我何时需要“特殊的本地异常处理”?有人可以更详细地解释一下吗?是否有一些代码,我真的不能通过让异常传播来轻松运行?

1 个答案:

答案 0 :(得分:2)

Mads Ager给了我这个答案:

基本上,这相当于在直线代码中使用try-catch:

int doSomethingElse() {
  try {
    return thisMightFail();
  } catch(e) {
    return -1;
  }
}

void doSomething() {
  int value = doSomethingElse();
  // operate on value
}

使用Futures就是这样(未经测试):

Future<int> doSomethingElse() {
  return thisMightFail().transformException((e) => -1);
}

void doSomething() {
  doSomethingElse().then((value) {
    // operate on value
  });
}

因此,这是针对本地异常处理而不是全局异常处理。如果你从不使用handleException或transformException,它们总是在非异步代码中处理顶级异常。