Функции приостановки не могут быть вызваны сопрограммой тела - PullRequest
0 голосов
/ 26 февраля 2020

В моем интеракторе есть метод, который получает канал из БД. Теперь для этих каналов мне нужно снова рассчитать количество непрочитанных сообщений. Так что мне придется снова делать вызовы БД, чтобы получить счет. Для вызова функции приостановки "chatRepository.getUnreadMessagesCountforChannel" я получаю сообщение об ошибке "Функции приостановки не могут быть вызваны телом сопрограммы". runBlocking, кажется, работает, если я оберну вокруг вызова. Но мне нужно знать, какова лучшая практика здесь.

class ObserveChannelsInteractor @Inject constructor(
    private val chatRepository: IChatRepository,
    private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) {
suspend operator fun invoke(): LiveData<Result<List<ChatV2ChannelDetails>>> = 
    withContext(dispatcher) {

    chatRepository.observeChannels().map {

        if (it is Result.Success) {
            it.data.forEach {
                val result = chatRepository.getUnreadMessagesCountforChannel(it.channel.channelId)
                if (result is Result.Success) {
                    it.unreadCount = result.data
                }
            }

            Result.Success(it.data.sortedByDescending { it.recentConversation?.conversation?.sentAt })
        } else if (it is Result.Error) {
            it
        } else {
            it
        }
    }
}

}

...