Загрузчик при получении данных в 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 = []. Но после этого я могу получить модель представления, пока идет другая выборка.

Как я могу изменить код для создания этой модели представления?

0 ответов

Другие вопросы по тегам