Я играю с SqlDelight, используя MySql с источником данных Hikary в простом проекте JVM, используя Kotlin и Flow для обработки результатов запросов. Первое выполнение запроса возвращает данные, как и ожидалось, однако Flow#emit() не запускается при изменении данных в базе данных.
Это функция репозитория, которую я вызываю:
fun getAllUser(): Flow<List<User>> = database.userQueries.getAll()
.asFlow()
.mapToList()
Это основная функция, в которой вызывается функция репозитория:
fun main() = runBlocking<Unit> { repository.getAllUser().collect {
println("Collecting users: $it")
}
}
Я попытался отладить подчиненный код, и прослушиватель объекта Query зарегистрирован, а основной корректно заблокирован при выполнении функции репозитория. Кто-нибудь еще испытал что-то подобное?
Решение проблемы
Так глупо, мой плохой! Я обновлял базу данных вручную и ожидал, что Flow волшебным образом обновится. В любом случае, обновление базы данных с помощью функций SqlDelight приводит к тому, что Flow выдает обновленный набор записей, как и ожидалось.
Комментариев нет:
Отправить комментарий