2016-06-22 26 views
6

Gözlemlenemeyenler, REactiveX'teki abonelere hataları nasıl yayılacağı konusunda net değil.ReactiveX: Gözlemlenemeyen Hataları Giderme

Örnek

observable.onNext(1); 
observable.onNext(2); 
observable.onError("Nope"); 
observable.onNext(3);<<won't work. 

olduğu gibi ancak ben yine de dinleyicileri aşağı bir hata ben gözlemlenebilir ölmek istemiyorum VE oluştu bilmek istiyorum senaryo var, bu kısıtlamayı kabul ediyoruz.

Bunun ana kullanım durumu, bir hata oluştuğunda, daha önce kaydettirdiği tüm gözlenebilirlere karşı "Kurulum" u çağırmak istemediğim UI kodudur.

Olası alternatifler

a)) ben bu çözüm

b sevmiyorum bir veri alanı olan özel bir nesne ve bir hata alanını

class Data 
{ 
    int value; 
    Error * error; 
} 

itmek iki akışları var bulunmaktadır. Verilerden biri ve hatalardan biri.

observable.onNext(1); 
observable.onNext(2); 
errorObservable.onNext("Error"); 
observable.onNext(3); 

Bunun için en yaygın uygulamalar nelerdir?

cevap

1

Kesinlikle A) seçeneğiyle giderim - hem veri hem de hata taşıyabilen bir nesne oluşturun. Verileri ve olası hatayı o nesneye nasıl sığdıracağınızın bir önemi yok ama her iki yayını da onNext() olayı olarak göndererek, abonelere tüm bilgileri ve bunun için tüm özgürlüğü veren doğru çözümdür.

B) seçeneği, daha karmaşık eşzamansız senaryolarda uygulamak için oldukça zor olabilir ve muhtemelen çok kötü olan Subject s kullanımına da yol açabilir.

0

Gözlemlenebilen kaynağa yalnızca yeniden deneme() eklerseniz, abonenin yeniden abone olmasına gerek yoktur.