Я пытаюсь обработать ответы, поступающие от DataTaskPublisher
, читающего код состояния ответа.
Когда код состояния больше 299, я хотел бы вернуть тип ServiceError
как Failure. Во всех примерах, которые я видел, я использовал .mapError
и _4 _... в этом конкретном случае из .flatMap
, я действительно не знаю, как обработать ответ издателя, чтобы вернуть ошибку вместо _6 _...
return URLSession.DataTaskPublisher(request: urlRequest, session: .shared)
.mapError{error in return ServiceError.request}
.flatMap{ data, response -> AnyPublisher<TResponse, ServiceError> in
if let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode){
return Just(data)
.decode(type: TResponse.self, decoder: JSONDecoder())
.mapError{error in return ServiceError.decode}
.eraseToAnyPublisher()
}else{
//???? HOW TO HANDLE THE ERROR?
}
}
.receive(on: RunLoop.main)
.eraseToAnyPublisher()