вызвать функцию приостановки внутри нормальной функции - PullRequest
1 голос
/ 01 июня 2019

Я хочу вызвать блокирование функции приостановки в обычной функции, но не блокировать поток до завершения функции приостановки, а затем вернуть Response

override fun intercept(chain: Interceptor.Chain): Response {

    // getSession is a suspend function
    val session = sessionProvider.getSession()

    return chain.proceed(
        chain
            .request()
            .newBuilder()
            .addHeader("Authorization", "${session.token}")
            .build()
    )
}

1 Ответ

3 голосов
/ 01 июня 2019

Похоже, что вы реализуете перехватчик OkHttp, поэтому я надеюсь, что intercept() вызывается в фоновом потоке.

Если это так, используйте runBlocking():

override fun intercept(chain: Interceptor.Chain): Response {

    // getSession is a suspend function
    val session = runBlocking { sessionProvider.getSession() }

    return chain.proceed(
        chain
            .request()
            .newBuilder()
            .addHeader("Authorization", "${session.token}")
            .build()
    )
}

runBlocking() выполнит функцию suspend, блокируя текущий поток, пока эта работа не будет завершена.

...