Я использую RxMoya, и мне было интересно узнать об использовании fiterSuccesfulStatusCodes, я попытаюсь описать, в чем моя проблема ... Итак, когда вы используете какой-то сетевой вызов, подобный этому
func getAllApps(gwId: Int) -> Observable<Response> {
return provider.request(RestAPI.GetAllApps(gwId: gwId)).filterSuccessfulStatusCodes()
}
Когда вы получите ответ с кодом состояния выше 299, ничего не произойдет, моя проблема в том, что я хотел бы отображать сообщение об ошибке пользователю, но когда вы проверяете, что делает filterSuccessfulStatusCodes:
public func filterSuccessfulStatusCodes() -> Observable<E> {
return flatMap { response -> Observable<E> in
return Observable.just(try response.filterSuccessfulStatusCodes())
}
}
Теперь мы приближаемся к моей проблеме. Итак, реализация filterSuccessfulStatusCodes использует функцию публичного экземпляра Moya.Resposne с этой реализацией:
public func filterSuccessfulStatusCodes() throws -> Response {
return try filterStatusCodes(200...299)
}
Как видите, эта вещь генерирует исключения ... но функция выше не генерирует повторно, она возвращает Observable общего типа E.
Мой первый вопрос: как так получилось, что вы можете использовать return Observable.just (попробуйте response.filterSuccessfulStatusCodes ()), когда функция не бросает / не возвращает. Вы можете использовать try withou do / chatch? (Я знаю, что с помощью try! / Try? Вы можете, но с помощью try, я могу только представить случай с повторным запуском).
Второй вопрос, есть ли способ реагировать на коды состояния ошибки на уровне наблюдаемых.
Спасибо