Проблемы с загрузкой сети - PullRequest
0 голосов
/ 14 марта 2019

Я использую следующие состояния для обработки моего состояния 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. И получить это состояние, когда новый запрос будет отправлен в последовательность (например, после нажатия кнопки обновления).

1 Ответ

0 голосов
/ 15 марта 2019

В настоящее время .loading испускается только после того, как первая наблюдаемая request испускает следующее значение, так как startWith применяется к внутренней наблюдаемой.

Перемещение .startWith во внешнюю наблюдаемую область гарантирует, что вы всегда получите событие .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)
...