Я пытаюсь использовать метод retryOnBecomesReachable
из файлов примеров RX на своем сетевом уровне
extension ObservableConvertibleType {
func retryOnBecomesReachable(_ valueOnFailure:E, reachabilityService: ReachabilityService?) -> Observable<E> {
return self.asObservable()
.catchError { (e) -> Observable<E> in
return reachabilityService.reachability
.skip(1)
.filter { $0.reachable }
.flatMap({ _ -> Observable<E> in
return Observable.error(e)
})
.startWith(valueOnFailure)
}
.retry()
}
}
// My layer
request
.flatMapLatest{ request in
provider.rx.request(request)
.map{ User.self }
.map{ RequestState.loaded($0) }
.retryOnBecomesReachable(.error(.notConnectedToInternet), reachabilityService: reachabilityService)
.catchError({ .just(.error($0)) })
.startWith(.startLoading)
}
Без этого метода все работает великолепно.Все ошибки отлавливаются и возвращаются .just(.error($0))
последовательности.
При использовании этого метода функция повтора работает потрясающе.Но когда что-то происходит (отображение, декодирование или другая ошибка), я получаю .notConnectedToInternet
.Я думаю причина в .startWith(valueOnFailure)
методе.Я пытался переместить, удалить, изменить положение, но ничего не помогает.Я застрял.
Что мне нужно сделать, чтобы использовать функцию повтора и исправить ошибки?