吞下可观察异常



是否有可能设计一个Rx操作符,以相同的顺序吞下重复的异常(与重试或捕获不同)?本质上与. select (x => x)相同,但忽略了过程中的异常。(我知道这是违反指南的)。

简短的回答是"不"。

不那么简短的答案是你的前提有缺陷;这是因为你不能让一个Observable抛出一个以上的错误,而你假设的操作符将是一个Observer。根据定义,观察者不应该影响可观察对象(只是不要告诉海森堡我这么说过)。

因此,这样的操作符在逻辑上是不可能的,因为它需要改变历史记录——回到过去,防止你的Observable抛出异常。当然,除非你的Observable违反了Rx规则。

不要让它那样做。无论如何,Rx将在防止这种情况方面做得很好。例如,Subject<T>不会在第一个OnError之后发布。

所有的Rx操作符都遵循指导原则(它们保证你只会收到一个错误,然后观察对象就会完成)。所以任何通过Reactive库创建的 observable都不会被诱导为允许多个错误通过。

你需要编写自己的自定义IObservable<T>实现和自定义操作符(不使用任何Reactive操作符)来实现你想要的。

但我不建议在没有进一步设计工作的情况下走这条路。你真正想要达到的目标是什么?你对问题的建模是否可能是错误的?如果你期望出现多个错误,那么也许你应该将这些错误作为数据通过Observable发送下来,而不是作为异常条件。即在源处捕获异常,并通过OnNext方法将其发送给IObserver<Exception>

最新更新