当我对服务器的请求收到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答案(而不是使用容量)