Загрузчик при получении данных в RX
Я довольно новичок в RX, и у меня проблемы с асинхронностью Observables. Я использую RxSwift, но я думаю, что проблема не относится к Swift, поэтому я напишу псевдокод.
Вот мой (упрощенный) вариант использования:
У меня есть текстовый ввод, и я получаю предложения для текста на серверной части.
Backend {
Single<Response> fetchResponse(String text)
}
Тогда ViewModelMapper
преобразует ответ в модель представления.
ViewModel {
[Cell] cells
}
Серверная часть может реагировать на различные задержки. Я, очевидно, хочу показать модель представления, соответствующую последнему вводу текста, который завершил выборку. Я не хочу инверсии: если выборка для he
заканчивается после получения hel
Я хочу оставить ответ на he
так как более свежий ответ прибыл раньше.
Мой псевдокод выглядит так:
textFlow
.throttle(0.3)
.distinctUntilChanged()
.flatMapLatest { text -> Backend.fetchResponse(text) }
.map { response -> ViewModelMapper.map(result) }
.subscribe { viewModel -> ... }
Я думаю, что все в порядке, но я не уверен, что инверсия не может произойти: не стесняйтесь поправлять меня.
Теперь я хочу показать загрузчик во время просмотра данных. Вот новая модель представления:
ViewModel {
bool isLoading
[Cell] cells
}
Очевидно, что когда пользователь вводит первый символ, происходит первое событие с isLoading = true и cell = []. Но после этого я могу получить модель представления, пока идет другая выборка.
Как я могу изменить код для создания этой модели представления?