先来看看官网的描述:retryWhen
将onError
中的Throwable
传递给一个函数,这个函数产生另一个Observable
,retryWhen
观察它的结果再决定是不是要重新订阅原始的Observable
。如果这个Observable
发射了一项数据,它就重新订阅,如果这个Observable
发射的是onError
通知,它就将这个通知传递给观察者然后终止。
这段话的大致意思就是,如果RxJava内部传过来的Observable
(retryWhen
方法传入的接口,通过接口方法传过来的)发射了一项数据,即发射onNext事件,就会重新订阅原始的Observable
,如果发射的是onError
事件,它就将这个事件传递给观察者然后终止。
那么,retryWhen
有什么作用呢,它的主要作用出现错误时,重新订阅,即重试,它跟之前的retry
操作符最大的区别就是,它可以延迟重试,例如,我们有这样一个需求,需要在遇到错误是,隔3秒重试一次,最多重试3次,先来看看代码