目前还不清楚如何在REactiveX中向订阅者传播错误,以致Observable不会被销毁。
实施例
observable.onNext(1);
observable.onNext(2);
observable.onError("Nope");
observable.onNext(3);<<won't work.
我接受这个限制,但是我仍然希望下游的侦听器能够知道发生了错误 和 我不希望观察者死亡。
主要用例是UI代码,如果出现错误,我不想打电话给#34;设置&#34;反对它之前注册的所有可观察物。
可能的替代方案
a)推送具有数据字段和错误字段的自定义对象
class Data
{
int value;
Error * error;
}
我不喜欢这个解决方案
b)有两个流。一个用于数据,一个用于错误。
observable.onNext(1);
observable.onNext(2);
errorObservable.onNext("Error");
observable.onNext(3);
对此最常见的做法是什么?
答案 0 :(得分:2)
我肯定会使用选项A) - 创建一个可以同时携带数据和/或错误的对象。我将如何将数据和可能的错误包装到该对象中并不重要通过一个流作为<button class="btn btn-primary btn-block">
事件发送两者是正确的解决方案,它为订阅者提供了所有信息以及处理该信息的所有自由。
B)选项在更复杂的异步场景中实现可能非常具有挑战性,并且可能会导致使用大量onNext()
,这也很糟糕。
答案 1 :(得分:0)
如果您只是将retry()添加到源observable,则订阅者无需重新订阅。