我正在查看源代码文件,发现在某些提交中我们更改了
的用法 .doOnSuccess(response -> logBodyAsJSON(response ));
进入
.doOnEach(response -> logBodyAsJSON(response ));
我找不到这样做的明确理由。
那么doOnSuccess和doOnEach有什么区别,在哪种用例中我应该分别使用它们?
答案 0 :(得分:2)
String#matches
仅在可观察对象成功返回项目且不会引发错误时才调用。因此,您将仅记录确认响应。
此外,doOnSuccess适用于Singles或Maybes,它们只能发出单个项目(否则,您将使用doOnNext)。如果使用可发射多个项目的Observable,则将使用doOnSuccess
来具有完全相同的行为。
doOnNext
将被调用,无论可观察对象是否发出项目,是否发出错误。它收到通知,而不是项目本身。它将被称为:
可观察项很有可能从单一变为可观察。另外,还需要能够记录错误以及成功,这就是为什么未选择doOnEach
的原因。