使用URLSession和Combine处理HTTP状态代码

问题描述 投票:0回答:1

我正在尝试处理从DataTaskPublisher读取其响应状态代码而来的响应。

[当状态码大于299时,我想返回ServiceError类型作为失败。在我看到的每个示例中,我都使用.mapError.catch ...在这种特定情况下,我从.flatMap中确实不知道如何处理发布者的响应以返回ErrorTResponse...]

    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()

我正在尝试处理从DataTaskPublisher读取其响应状态代码的响应。当状态码大于299时,我想将ServiceError类型返回为Failure。在...

swift urlsession combine
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.