Rx java 如何缓存/重播重新验证请求?RxJava

Rx java 如何缓存/重播重新验证请求?RxJava,rx-java,Rx Java,当我对服务器的请求收到401请求时,我试图实现一些回退重新验证机制。为此,我使用了onErrorResumeNext(),这样每当出现错误时,我都可以尝试重新验证(如果可能的话) 比如说 fun streamFromServerObservable(): Observable<ServerData> { ... } fun requestFromServer() { streamFromServerObservable .onErrorResumeNext(

当我对服务器的请求收到401请求时,我试图实现一些回退重新验证机制。为此,我使用了onErrorResumeNext(),这样每当出现错误时,我都可以尝试重新验证(如果可能的话)

比如说

fun streamFromServerObservable(): Observable<ServerData> {
  ...
}

fun requestFromServer() {
   streamFromServerObservable
       .onErrorResumeNext(ReAuthenticator.reAuthenticateAndRetry(streamFromServerObservable))
}
fun streamFromServerObservable():Observable{
...
}
fun requestFromServer(){
可观测的
.onErrorResumeNext(重新身份验证程序.重新身份验证和重试(streamFromServerObservable))
}
乐趣 重新验证和重试的方法如下:

fun <T> reAuthenticateAndRetry(toBeResumed: Observable<T>): Func1<Throwable, Observable<T>> {
        return Func1 {
            if (isAuthenticationError(it)) {
                return@Func1 reAuthenticate().flatMap { toBeResumed }
            }

            Observable.error(it)
        }
    }

fun reAuthenticate() : Observable<User> {
   return  api.login()
}
fun重新验证和重试(待验证:可观察):Func1{
返回函数1{
if(isAuthenticationError(it)){
return@Func1重新验证().flatMap{toBeResumed}
}
可观测误差(it)
}
}
有趣的重新验证():可观察{
返回api.login()
}
在这种情况下,一切正常,但我希望以这样的方式实现,即如果有多个未经授权的失败请求,我可以使用第一个重新验证请求的答案为其他请求提供信息

我认为在Observable上使用replay操作符时,reAuthenticate()会返回,但只要reAuth停止工作,就好像它停止了流式事件一样


我知道**cache*操作符,但是我想在短时间内重播重新验证的答案(而不是使用容量)

您是否尝试过使用retry/retryWhen操作符?我正试图实现相反的@Will!我想停止重复的请求(也就是说,如果我在做一个重新授权请求,我只想重播最后一个响应,如果它是在一个小的时间窗口内完成的),如果我理解你的权利,如何使用
lift()?您可以在那里捕获任何可丢弃的
,然后将其传递给所需的处理程序,如果是关键异常,则取消订阅observable