2016-06-22 30 views
6

它不清楚如何將錯誤傳播給REactiveX中的訂閱者,使得Observable不會被銷燬。ReactiveX:錯誤處理不會破壞可觀察的

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

我接受這種限制,因爲它是,但我仍然有場景,我想聽衆下游知道發生錯誤 和 我不希望觀察到死。

這個主要的用例是UI代碼,如果出現錯誤,我不希望針對之前註冊的所有可觀察對象調用「Setup」。

可能的替代是

一)推動,有一個數據字段的自定義對象和錯誤場

class Data 
{ 
    int value; 
    Error * error; 
} 

我不喜歡這個解決方案

B)有兩個流。一個用於數據,另一個用於錯誤。

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

什麼是最好的常見做法呢?

回答

1

我肯定會選擇A) - 創建一個對象,可以攜帶數據和/或錯誤。我無所謂你將如何將數據和可能的錯誤包裝到該對象中,但通過一個流發送兩個事件,作爲onNext()事件是給訂閱者提供所有信息和處理該事件的所有自由的正確解決方案。

B)選項在更復雜的異步場景中實現可能相當具有挑戰性,並且可能導致使用很多Subject,這也是不好的。

0

如果您只需將retry()添加到源observable,則訂閱者不需要重新訂閱。