swift - 网络开始加载问题
问题描述
我正在使用下一个状态来处理我的 API 状态
enum RequestState<T: Decodable> {
case loading
case loaded(T)
case error(Error)
}
以及更改这些状态的以下代码:
let response = request
.flatMapLatest {
provider.rx.request($0)
.map(T.self).map { RequestState.loaded($0) }
.asDriver(onErrorRecover: { error in
return Driver.just(.error(error))
})
.startWith(.loading)
}
一切都很棒,但除了一个问题。case loading
仅在网络正常且请求正在进行时才有效。
联系
点击 - 加载微调器 - 响应
没有关联
Tap - 网络瘦身延迟 - 无连接响应
我想总是开始加载。也许使用新的状态case startedLoading
。并在向序列推送新请求时获取此状态(例如,在点击刷新按钮后)。
解决方案
目前,.loading
仅在第一个request
observable 发出下一个值后发出,就像startWith
应用于内部 observable 一样。
移动.startWith
到外部 observable 将确保你总是.loading
先得到一个事件。
let response = request
.flatMapLatest {
provider.rx.request($0)
.map(T.self).map { RequestState.loaded($0) }
.asDriver(onErrorRecover: { error in
return Driver.just(.error(error))
})
}
.startWith(.loading)
推荐阅读
- c++ - 如何调整我的代码以确保我的迭代器代码接受用户输入?
- typescript - 尝试使用 TypeScript 和 vue-property-decorator 汇总 Vue
- crash - 为什么在 Glide 4.9.0 中使用 .asBitmap() 会崩溃
- c# - 在显示阴影时准确设置表单边界
- java - Java Spring Reactive Rest API 测试类给出错误 - 空指针异常
- javascript - 尝试将数字增加给定值
- jquery - 滚动时突出显示多个菜单锚链接
- visual-studio - Visual Studio Code 无法识别文件更改
- python - QtabWidget 中的 gnuplot 窗口
- api - 卷曲响应在一行而不是多行