我正在尝试实现一个自动登录功能,并在自动登录完成后需要更改前一个可观察对象的参数时重试。
所以我创建了一个函数
class TestClass(): Function<Flowable<out Throwable>, Flowable<*>> {
override fun apply(flowable: Flowable<out Throwable>): Flowable<*> {
return flowable
.flatMap {
if (it is HttpException && it.code() == 401 ) {
Timber.d("apply: Doing AutoLogin.")
dataSource
.login(document, password)
.map {
//Auto login done, update user
}
.doOnError({
// login failed
})
.toFlowable()
} else {
Flowable.error(it)
}
}
}
}
并以这种方式应用它:
dataSource.apiCall(user)
.retryWhen(TestClass())
.subscribe()
也试过这种方式:
Single.defer {
dataSource.apiCall(user)
.retryWhen(TestClass())
}
.subscribe()
}
问题是,在重试请求时登录后,用户没有更新。
我做错了什么?