3

我正在尝试在 Dart 中真正获得 Futures,并且我注意到我遇到的几乎每个示例都使用 handleException 来处理完成 Future 的异常。然而 API 文档指出“在大多数情况下,不需要调用 handleException,因为如果未来的值正在被消耗,与此 Future 关联的异常会自然传播。如果您需要做一些特殊的本地异常处理相关的,请仅调用 handleException到这个特定的未来的价值。”

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

4

1 回答 1

2

Mads Ager 给了我这个答案:

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

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

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

使用期货是这样的(未经测试):

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

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

所以这是针对本地异常处理而不是全局异常处理。如果您从不使用对应于始终在非异步代码中处理顶级异常的 handleException 或 transformException。

于 2012-11-15T17:02:30.927 回答