У меня есть функция fun getToken(): Maybe<String>
в моем TokenRepository
Я использую ее в моем перехватчике вот так
class AuthorizationInterceptor(private val tokenRepository: TokenRepository) : Interceptor {
private val authorization = "apiToken"
override fun intercept(chain: Interceptor.Chain): Response {
val original = chain.request()
val requestBuilder = original.newBuilder()
tokenRepository.getToken().blockingGet()?.let { requestBuilder.header(authorization, it) }
requestBuilder.method(original.method(), original.body())
return chain.proceed(requestBuilder.build())
}
}
Однако я бы хотел избавиться от blockingGet()
, потому что это не очень хорошая практика, и мне нужно было добавить .allowMainThreadQueries()
в мою конфигурацию Room Db.
Я заменил это так
override fun intercept(chain: Interceptor.Chain): Response {
val original = chain.request()
val requestBuilder = original.newBuilder()
tokenRepository.getToken()
.subscribe(
{ token ->
token?.let { requestBuilder.header(authorization, it) }
requestBuilder.method(original.method(), original.body())
},
{},
{}
)
return chain.proceed(requestBuilder.build())
}
Но это не будет ждать с возвратом, пока у меня не будет мой токен.
Как правильно его реализовать, чтобы он возвращался из функции после вызова onComplete
в моей подписке?