Future.error
- Dart kursu
- Başlangıç
- Ders 109/116
- 5 dk
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
void main() {
// Future.error ile hatalı bir Future oluştur
// .then ile başarıyı yaz
// .catchError ile hatayı yazdır
}Örnek çözüm
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?
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
Future.error(Exception("upss")).then((v) => print(v)).____((e) => print(e));
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 |