在RX中提取数据时的加载程序

时间:2018-08-09 14:29:57

标签: reactive-programming rx-swift

我是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和cells = []。 但是在那之后,我可以在进行另一个提取的同时接收视图模型。

如何更改代码以生成此视图模型?

0 个答案:

没有答案