3

私は実際に Dart で Future を取得しようとしていますが、遭遇するほぼすべての例で、Future を完了する例外を処理するために handleException を使用していることに気付きました。API ドキュメントには、「ほとんどの場合、handleException を呼び出す必要はありません。これは、future の値が消費されている場合、この Future に関連付けられた例外が自然に伝播するためです。関連する特別なローカル例外処理を行う必要がある場合にのみ、handleException を呼び出してください。この特定の Future の値に。」

では、いつ「特別なローカル例外処理」が必要になるのでしょうか? 誰かがそれをもう少し詳しく説明できますか?正直なところ、例外を伝播させることで簡単に実行できないコードはありますか?

4

1 に答える 1

2

マッドエイガーは私にこの答えを与えました:

基本的に、これは直線コードで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を使用しない場合。

于 2012-11-15T17:02:30.927 に答える