"await()" внутри "await()"а или как получить "parent scope"? Kotlin
Есть функция:
suspend fun getChats() {
val chatList = mutableListOf<Chat>()
getMyChats { chats ->
chats.forEach {
it.getDetail().await()
}
}.await()
}
Но компилятор ругается что Suspension functions can be called only within coroutine body для await() который находится внутри forEach цикла. Как сделать чтоб работало?
Ответы (1 шт):
Автор решения: Sergei Buvaka
→ Ссылка
Ну уберите модификатор suspend c вашей функции. await() или async() вызывается из корутины. Когда же вы указываете ключевое слово suspend вы говорите, что эта функция будет вызвана из корутины где-то в другом месте.
Вот пример кода:
private val parentJob by lazy { Job() }
protected val backgroundScope: CoroutineScope by lazy { CoroutineScope(parentJob + Dispatchers.IO) }
fun coroutineFun() {
backgroundScope.launch {
someFun()
}
}
private suspend fun someFun() {
//do something
}