CodeBlanks Logo Icon CodeBlanks

Future.error

Future.error ve catchError öğrenirsin.

Future.error

Bir Future hata ile de bitebilir. Future.error(Exception("hata")) hemen hata ile tamamlanan bir Future yaratır. .then yalnızca başarı durumunda çalışır; hatayı yakalamak için .catchError kullanılır.

Örnek: Future.error(Exception("upss")).then((v) => print(v)).catchError((e) => print(e));. Burada .then atlanır, .catchError çalışır ve hatayı yazdırır. Bu, try/catch'in asenkron versiyonudur. .catchError'a dönen değer bir Future'dır; bu yüzden zincirin devamı da yine Future olur. Birden çok hata türünü denetlemek için test işlevi de verilebilir.

catchError detay

.catchError bir geri çağrı alır. Bu geri çağrı hatayı parametre olarak alır. .catchError((e) => print("hata: \$e")). Dönen değer bir Future olduğu için zincirin devamı yine Future olur; böylece hatadan sonra kurtarma değeri üretip devam edebilirsin.

Belirli bir hata türünü yakalamak için test parametresi verilebilir: .catchError((e) => print(e), test: (e) => e is FormatException). Bu yalnızca FormatException türündeki hataları yakalar; diğerleri zincirde yukarı yayılır. Bu, on clause'un asenkron karşılığıdır. Hata durumunda kodu temizlemek için .whenComplete de vardır; finally'in asenkron karşılığıdır.

Uygulama Sıra sende: hatayı yakala

Future.error(Exception("upss")) ile hata üreten bir Future oluştur. .then((v) => print(v)) ile başarı durumunu yaz, .catchError((e) => print(e)) ile hatayı yazdır. Böylece hata ekrana düşer.

Başlangıç kodu

main.dart
void main() {
  // Future.error ile hatalı bir Future oluştur
  // .then ile başarıyı yaz
  // .catchError ile hatayı yazdır
}

Örnek çözüm

main.dart
void main() {
  Future.error(Exception("upss")).then((v) => print(v)).catchError((e) => print(e));
}

Beklenen çıktı

Exception: upss

Soru ve cevaplar

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

1 .then ne zaman çalışır?

main.dart
Future.error(Exception("hata"))
  .then((v) => print(v))
  .catchError((e) => print(e));
  • Yalnızca hata durumunda
  • Yalnızca başarı durumunda Doğru cevap
  • Hiçbir zaman
  • Her zaman

Açıklama: then yalnızca başarıda çalışır.

2 catchError

Soru
Future.error(Exception("upss")).then((v) => print(v)).____((e) => print(e));
Cevap
Future.error(Exception("upss")).then((v) => print(v)).catchError((e) => print(e));

Açıklama: catchError hatayı yakalar.

3 Future.error eşleştir

Kavram Anlamı
Future.error hata ile tamamlanır
.then başarıda çalışır
.catchError hatayı yakalar
.whenComplete her zaman çalışır

Başlangıç bölümündeki tüm dersler