@alexandrsemen4ukk

Не понимаю как в return засунуть результат асинхронной операции в Kotlin?

var news: EntityList // предположим что я его проинициализировал ранее

       override fun getNewsFromApi(search:String): EntityList {
        val call: Call<EntityList> = if (search.isNotEmpty()) {
            api.getEverythingNews(q = search, apiKey = API_KEY)
        } else {
            api.getTopNews(country = "ru", apiKey = API_KEY)
        }
        
        call.enqueue(object : Callback<EntityList> {
            override fun onResponse(call: Call<EntityList>, response: Response<EntityList>) {
                news = response.body() ?: news
            }

            override fun onFailure(call: Call<EntityList>, t: Throwable) {
                Log.e("AAA", t.toString())
            }

        })
        return news
    }


Есть у меня функция, которая возвращает мне ответ из api. Суть проблемы заключается в том, что call.enqueue(object : Callback<EntityList> выполняется асинхронно, соответственно в return у меня не попадает ответ от сервера. Вычитал что мне должны помочь колбэки, но я чёт не нашел инфы, которая помогла бы мне понять как реализовать решение.
Использую retrofit2
Спасибо
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
Jacen11
@Jacen11
Не понимаю как в return засунуть результат асинхронной операции в Kotlin?
никак, что за бред.

. Вычитал что мне должны помочь колбэки, но я чёт не нашел инфы, которая помогла бы мне понять как реализовать решение.
ну хреново искал. В onResponse лямбду закинуть можно. Но вообще с колбеками сложно работать, так сейчас не делают. Есть же корутины и саспенд функции. Там как раз код будет выглядеть как будто последовательно делается.

ЗЫ а ты хоть понял что такое коллбэк? а что такое лямбда выражение знаешь?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы