Dart Streamクラスerrorコンストラクタ

シェルスクリプト Dart

Dart Streamクラスのerrorコンストラクタについてメモ書き。

errorはStreamが完了する前にエラーイベントを発生させるコンストラクタ。
errorコンストラタの第1引数にはエラーメッセージを指定する。第2引数はオプション引数(省略可能)としてスタックトレースを指定する。後述するコーディング例を見てもらうと分かるが、スタックトレースを出力するとエラーの発生箇所が明確になる。

以下はリスナー(listen)が単純に配列strのデータを受け取るコード。

void main() {
  Stream<String> stream;
  try {
    stream = () async* {
      List<String> str = ["a", "b"];
      for (String s in str) {
        yield s;
      }
    }();
  } catch (e, s) {
    stream = Stream<String>.error(e, s);
  }

  stream.listen(
    (data) {
      print('データ: $data');
    },
    onError: (err, stackTrace) {
      print('エラー: $err');
      print('スタックトレース: $stackTrace');
    },
    onDone: () {
      print('完了');
    },
  );
}

実行結果。配列strのデータを表示した後、onDone:で処理を完了している。

データ: a
データ: b
完了

次に意図的にエラーを出力してみる。

void main() {
  Stream<String> stream;
  try {
    stream = () async* {
      List<String> str = ["a", "b"];
      for (String s in str) {
        yield s;
      }
    }();
    // 意図時にエラーをスローする。
    throw FormatException('フォーマットエラー');
  } catch (e, s) {
    stream = Stream<String>.error(e, s);
  }

  stream.listen(
    (data) {
      print('データ: $data');
    },
    onError: (err, stackTrace) {
      print('エラー: $err');
      print('スタックトレース: $stackTrace');
    },
    onDone: () {
      print('完了');
    },
  );
}

実行結果。リスナーのonError:でtry catch文にあるStream.error(e, s)からエラーメッセージとスタックトレースを受け取り処理を実行している。最後にonDone:で処理を完了する。

エラー: FormatException: フォーマットエラー



📁 Dart Streamクラスの全体像・主要メソッド
Streamクラスのコンストラクタや主要メソッド一覧は、以下の解説マップをご覧ください。
➔ Dart Streamクラスの使い方:コンストラクタと主要メソッド解説マップ

コメント

タイトルとURLをコピーしました