Рассмотрим следующий тест:
@Test
void test() {
DirectProcessor<Object> objectTopicProcessor = DirectProcessor.create();
Runnable r = mock(Runnable.class);
objectTopicProcessor.subscribe(next -> {throw new RuntimeException("eee");});
objectTopicProcessor.subscribe(next -> r.run());
assertThrows(RuntimeException.class, () -> objectTopicProcessor.onNext("")); // exception is thrown
verify(r).run(); // it's not run
}
Представьте, что я создаю API, в котором я предоставляю процессор клиенту.
Когда у кого-то есть несколько подписок, и одна из них выдает исключение, другие вызовы не выполняются. Кроме того, исключение распространяется и выбрасывается из objectTopicProcessor.onNext("")
. Я бы хотел предотвратить такое поведение.
Я знаю, что клиент может заключить свой код в try-catch внутри подписки, но есть ли другой способ? Иногда, например, может произойти NullPointer или клиент может забыть о проверке исключения. Для API также неудобно заставлять клиентов пытаться перехватить все исключения.
Каковы лучшие стратегии для обработки таких случаев?