首页 > 解决方案 > 网络开始加载问题

问题描述

我正在使用下一个状态来处理我的 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。并在向序列推送新请求时获取此状态(例如,在点击刷新按钮后)。

标签: swiftnetworkingrx-swift

解决方案


目前,.loading仅在第一个requestobservable 发出下一个值后发出,就像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)

推荐阅读