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
コメント