Rx Java - избавиться от blockingGet (), но подождать с оператором return до вызова onComplete - PullRequest
0 голосов
/ 29 марта 2020

У меня есть функция 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 в моей подписке?

...