如何缓存/重播重新授权请求? RxJava

时间:2016-01-28 18:26:57

标签: rx-java

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

例如

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

fun requestFromServer() {
   streamFromServerObservable
       .onErrorResumeNext(ReAuthenticator.reAuthenticateAndRetry(streamFromServerObservable))
}

乐趣 reAuthenticateAndRetry方法如下:

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()
}

在这种情况下,事情正在发挥作用,但是我希望以这种方式实现这一点,如果通过未授权存在多个失败的请求,我可以使用第一个重新验证请求的答案来提供其他请求。

我想在Observable上使用重播运算符, reAuthenticate()会返回,但只要reAuth停止工作,就好像它停止了流媒体事件一样。

我知道** cache *运算符,但是我想在短时间内重播reAuth答案(而不是使用容量)

0 个答案:

没有答案