7

目前尚不清楚如何将错误传播给 REactiveX 中的订阅者,以免 Observable 被破坏。

例子

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

我接受这个限制,但是我仍然有这样的场景,我希望下游的听众知道发生了错误,并且我不希望 observable 死掉。

主要用例是 UI 代码,如果出现错误,我不想针对之前注册的所有 observable 调用“Setup”。

可能的替代方案是

a)推送具有数据字段和错误字段的自定义对象

class Data
{
    int value;
    Error * error;  
}

我不喜欢这个解决方案

b) 有两个流。一个用于数据,一个用于错误。

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

对此的最佳常见做法是什么?

4

2 回答 2

2

我肯定会选择选项 A) - 创建一个可以同时携带数据和/或错误的对象。我并不关心您将如何将数据和可能的错误包装到该对象中,但是通过一个流作为onNext()事件发送两者是正确的解决方案,它为订阅者提供了所有信息和处理该问题的所有自由。

B) 选项在更复杂的异步场景中实现可能非常具有挑战性,并且可能会导致使用大量Subjects,这也很糟糕。

于 2016-08-16T21:01:03.677 回答
0

如果你只是将 retry() 添加到源 observable,订阅者不需要重新订阅。

于 2016-10-28T19:54:27.723 回答