Estoy revisando un archivo de código fuente y se encuentra en ciertos cometen en que se cambió el uso de
.doOnSuccess(response -> logBodyAsJSON(response ));
Dentro
.doOnEach(response -> logBodyAsJSON(response ));
No puedo encontrar una razón clara para hacer eso.
Entonces, ¿cuál es la diferencia entre doOnSuccess y doOnEach, y en el que caso de uso que debe utilizar cada uno de ellos?
doOnSuccess
será, como su nombre lo indica, sólo puede ser llamado cuando sus rendimientos observables un artículo con éxito y no plantea un error. Como tal, sólo se registrará la respuesta de confirmación.
Además, doOnSuccess trabaja para solteros o Maybes, que sólo puede emitir un solo artículo (que usaría doOnNext lo contrario). Si utiliza un observable que puede emitir varios elementos, tendrá que utilizar doOnNext
para tener el mismo comportamiento exacto.
doOnEach
será llamado si los observables emite un elemento, error o no. Se recibe una notificación en lugar del elemento en sí. Se va a llamar:
- onSuccess y onError para una sola
- onNext, onComplete y onError para un observable típico
Es muy probable que el elemento observable cambió de un solo a un observable. Además, no existiría la necesidad de ser capaz de registrar los errores, así como los éxitos, por lo que doOnNext
no fue elegido.