Разница между doOnSuccess и doOnEach, и в каком случае использования я должен использовать каждый из них - PullRequest
3 голосов
/ 25 июня 2019

Я просматриваю файл с исходным кодом и обнаружил, что при определенном коммите мы изменили использование

    .doOnSuccess(response -> logBodyAsJSON(response ));

На

    .doOnEach(response -> logBodyAsJSON(response ));

Я не могу найти четкую причину для этого.

Так в чем же разница между doOnSuccess и doOnEach, и в каком случае я должен использовать каждый из них?

1 Ответ

2 голосов
/ 25 июня 2019

doOnSuccess будет, как следует из названия, вызываться только тогда, когда ваша наблюдаемая возвращает элемент успешно и не вызывает ошибку. Таким образом, вы будете только регистрировать ответы подтверждения.

Кроме того, doOnSuccess работает для синглов или Maybes, которые могут излучать только один элемент (в противном случае вы использовали бы doOnNext). Если вы используете Observable, который может испускать несколько предметов, вы будете использовать doOnNext, чтобы иметь точно такое же поведение.


doOnEach будет вызван независимо от того, испускает ли наблюдаемый объект элемент, ошибку или нет. Он получает уведомление вместо самого предмета. Это будет называться:

  • onSuccess и onError для одного
  • onNext, onComplete и onError для типичного наблюдаемого

enter image description here

Весьма вероятно, что наблюдаемый предмет изменился с одного на наблюдаемый. Кроме того, существует необходимость в регистрации ошибок и успехов, поэтому doOnNext не был выбран.

...