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

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

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

takeWhile()は受信したStreamイベントをテストし、条件を満たしている間は受信したStreamイベントを返すメソッド。
条件は引数のtest関数で指定する。test関数の戻り値はbool型で、trueの場合は受け取ったStreamイベントを返し、falseになると終了する。
takeWhile()は上記以外にStreamからエラーを受け取ると終了する。この場合、受け取ったエラーが最後のStreamイベントとなる。
受信したStreamがブロードキャストの場合、takeWhile()はブロードキャストを返す。ただし、返されるStreamイベントはリッスンを返した時点からになる。

コーディングで動作確認。

void main() {
  final stream = () async* {
    for (int i = 0; i < 10; i++) {
      if (i == 5) {
        throw "Test Error";
      }
      yield i;
    }
  }();
  stream.takeWhile((element) => element < 4).listen(
    print,
    onError: (e) {
      print(e.toString());
    },
  );
}

実行結果。
Streamイベントが4より小さい間は条件を満たしているのでStreamイベントが返される。

0
1
2
3

次はi=5の時エラーを投げる。

void main() {
  final stream = () async* {
    for (int i = 0; i < 10; i++) {
      if (i == 5) {
        throw "Test Error";
      }
      yield i;
    }
  }();
  stream.takeWhile((element) => element < 10).listen(
    print,
    onError: (e) {
      print(e.toString());
    },
  );
}

実行結果。
受信したエラーが最後のSteamイベントとなる。

0
1
2
3
4
Test Error

コメント

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