我是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 = []。 但是在那之后,我可以在进行另一个提取的同时接收视图模型。
如何更改代码以生成此视图模型?