Как не прерывая Flow вызвать долгую по времени выполнения suspend функцию?
Я пытаюсь разобраться в принципах работы с Kotlin Coroutines. У меня есть список передаваемый через Flow
в Viewmodel
.
val chatsFlow = chatsChangedFlow.asSharedFlow()
.map {
chatList.map { chat ->
Chat(
id = chat.id,
title = chat.title,
photo = chat.photo?.let {
val photoFilePath = downloadFile(it.file)
ProfilePhoto(
thumbnail = it.thumbnail.data,
filePath = photoFilePath
)
}
)
}
}
И каждый раз при вызове downloadFile
Flow
дожидается возврата значения, лишь после этого идёт на следующую итерацию.
Можно ли добиться в данном случае поведения чтоб при вызове downloadFile
поле filePath
оставалось неинициализированным и лишь после обработки значения через некоторое время заполнялось тем самым не прерывая работы Flow
?
P.S. downloadFile
тоже suspend функция на основе suspendCancellableCoroutine