Сопрограммы: не могу вернуть значение после окончания работы - PullRequest
0 голосов
/ 12 июня 2019

В моем приложении для Android мне нужно после выполнения некоторой длительной сетевой операции вернуть результат (например, через 10 секунд)

здесь фрагмент:

import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

 GlobalScope.launch(Dispatchers.Main) {
                lateinit var response: Response<Void>
                response = executeOperations.await()
                return response
            }

но я получаю ошибку компиляции в этой строке:

return response

Сообщение об ошибке:

'return' is not allowed here

1 Ответ

1 голос
/ 12 июня 2019

Так не работает.Ваш return там не разрешен, потому что вы находитесь внутри coroutine context на этих { }

Но на самом деле лучший способ сделать это - создать какой-то метод и обработать этот ответ вместо его возврата.В вашем случае я немного запутался:

Преобразование:

GlobalScope.launch(Dispatchers.Main) {
                lateinit var response: Response<Void>
                response = executeOperations.await()
                return response
            }

В:

GlobalScope.launch(Dispatchers.IO) {
                lateinit var response: Response<Void>
                response = executeOperations.await()
                 withContext(Dispatchers.Main){
                  handleResponse(response)
               }
            }

Кроме того, ваша тяжелая работа не должна происходить в Dispatchers.Main но в Dispatchers.IO

...