dart catchErrorのチェーン

catchErrorをチェーンしたときの理解があやしかったので試した

void main() async {

  // catchErrorで例外を投げる
  _future(true)                    // o:実行される x:されない
      .catchError((e) => throw e)  // x
      .then((v) => _future(v))     // o
      .catchError((e) => throw e)  // o
      .then((v) => _future(v))     // x
      .catchError((e) => throw e); // o

  // catchErrorで何もしない
  _future(true)
      .catchError((e) => {})       // x
      .then((v) => _future(v))     // o
      .catchError((e) => {})       // o
      .then((v) => _future(v))     // o
      .catchError((e) => {});      // o
}

Future<bool> _future(bool b) async {
  if (b) {
    return false;
  } else {
    throw Exception();
  }
}

catchErrorで例外を投げると次のcatchErrorは実行されてしまう。例外投げたら処理中断したい場合が多いと思うのでcatchErrorを複数チェーンするのはやめたほうが良さそう。素直にこう書く

try {
  _future(true)
      .then((v) => _future(v))
      .then((v) => _future(v));
} catch(e) {
}

以上です