CodeBlanks Logo Icon CodeBlanks

Stream error

Stream error ve onError öğrenirsin.

Stream hataları

Bir stream, normal öğelerin yanında hata olayları da yayınlayabilir. Hata yayınlandığında stream normalde kapanır; sonraki öğeler gelmez.

Dinleyicide onError ile ya da try/catch ile yakalanır. .handleError(fn) transformer'ı hataları yakalayıp akışı devam ettirir.

Örnek: Stream.error('boom').listen(print, onError: (e) => print('hata: $e'));. Hata onError'e gider, print hiç çağrılmaz.

try/catch ile await for

await for ile stream tüketilirken hata fırlatıldığında, normal try/catch ile yakalanır. Stream kapanır, döngü sonlanır.

Örnek: try { await for (var x in Stream.error('boom')) print(x); } catch (e) { print('hata: $e'); }. Hata yakalanır, 'hata: boom' yazdırılır.

Bu yöntem senkron hata yakalamaya benzer; async akışta da aynı görünümdedir.

Uygulama Stream hatasını yakala

main'i async yap. try { await Stream.error('boom').forEach(print); } catch (e) { print('hata: $e'); } bloğunu ekle.

Başlangıç kodu

main.dart
void main() {
  // async yap; hata yayınlayan stream'ı try/catch ile sar
}

Örnek çözüm

main.dart
void main() async {
  try {
    await Stream.error('boom').forEach(print);
  } catch (e) {
    print('hata: $e');
  }
}

Beklenen çıktı

hata: boom

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hata yayınlandığında ne olur?

  • Stream devam eder
  • Hata yok sayılır
  • Program çöker
  • Stream normalde kapanır Doğru cevap

Açıklama: hata yayınlandığında stream normalde kapanır.

2 Hata işleme yolları

Kavram Anlamı
onError Dinleyici parametresi
try/catch await for ile
.handleError Transformer
.toList Sonlandırıcı

3 Hata işleyici metodu

Soru
var t = s.____((e) => print('hata'));
Cevap
var t = s.handleError((e) => print('hata'));

Açıklama: handleError transformer'ı hataları yakalar.

İleri seviye bölümündeki tüm dersler