Dart Streamクラスmap()メソッド

Dar言語StreamクラスtoSet()メソッドDart

Dart Streamクラスのmap()メソッドについてメモ書き。

map()は受け取ったStreamイベントを新しいStreamイベントに変換するメソッド。
引数のconvert()関数は受け取ったStreamを変換し、map()メソッドに変換後の値を返す。
map()メソッドの戻り値はStream<S>型。Sは型パラメータでconvert関数の戻り値が入る。
convert()メソッドで例外が発生した場合、エラーイベントとして値を返す。
ブロードキャストStreamを受け取った場合はブロードキャストとして値を返す。
エラーとdoneイベントはmap()メソッドの変換対象にならない。

コーディングで動作を確認。
先ずは正常系から。

void main() {
  final stream = () async* {
    for (int i = 0; i < 5; i++) {
      yield i;
    }
  }();
  stream.map((event) => "map $event").listen(print);
}

実行結果。

map 0
map 1
map 2
map 3
map 4

次はconver関数で例外を発生させてみる。

void main() {
  final stream = () async* {
    for (int i = 0; i < 5; i++) {
      yield i;
    }
  }();
  stream.map((event) {
    throw "map $event";
  }).listen((newevt) {
    print(newevt);
  }, onError: (e) {
    print("onError: $e");
  });
}

実行結果。
発生させた例外がエラーイベントとして返される。

onError: map 0
onError: map 1
onError: map 2
onError: map 3
onError: map 4

最後にmap()が例外を受け取った場合の処理を確認。
i==3で例外を発生させる。

void main() {
  final stream = () async* {
    for (int i = 0; i < 5; i++) {
      if (i == 3) {
        throw "Stream Error";
      }
      yield i;
    }
  }();
  stream.map((event) {
    return "map $event";
  }).listen((newevt) {
    print(newevt);
  }, onError: (e) {
    print("onError: $e");
  }, cancelOnError: false);
}

実行結果。
受け取った例外がそのまま返される。

0
1
2
onError: Stream Error

コメント

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